每个层次结构的实体框架表,使用TypeID作为属性和条件

时间:2012-09-17 09:07:49

标签: asp.net-mvc entity-framework entity-framework-4 jstree table-per-hierarchy

我正在使用实体框架+ mvc实现域树结构。 我使用JSTree来呈现组织结构。

My model scheme so far: 请注意,在该模型方案中,我使用TypeID属性作为我的继承条件和DomainEntity的属性。 这个corse抛出以下错误:

  

错误3错误3032:从行开始映射片段时出现问题   139:条件成员' DomainEntities.EntityTypeID'有条件的   除了' IsNull = False'被映射。要么删除条件   DomainEntities.EntityTypeID或从映射中删除它。   C:\ Code \ CamelotShiftManagement \ CamelotShiftManagement \ Models \ CamelotDB.edmx 140 15 CamelotShiftManagement

假设我不会将TypeID用作属性,并将其作为继承关联的条件,当我尝试填充我的域实体的树时,将导致以下内容:

            foreach (var entity in entities)
            {
                JsTreeModel tree = new JsTreeModel()
                {
                    attr = new JsTreeAttribute() 
                    { 
                        id = entity.EntityID.ToString(),

                    },
                    data = entity.EntityName
                };

                if (entity is OrganizatioanlUnit)
                {
                    tree.attr.type = eNodeType.OrganizationalUnit;
                }
                if (entity is Calendar)
                {
                    tree.attr.type = eNodeType.Calendar;
                }

                PopulateTree(entity, tree);
                io_Node.children.Add(tree);
            }

此代码不可维护,因为当引入新实体时,我将不得不更改此代码,如果我只能访问一个属性,告诉我我正在处理的实体类型.. :)

这就是困境: 如果我使用继承和TypeID作为每个继承的条件我不能作为DomainEntity的属性访问它,这将要求我使用switch-case对typof(实体)来确定我应该发送到我的JSTree插件的类型,因为他期望他的JSON中的每个节点都有一个类型标识,如果我不使用继承,我将失去多态功能。

不仅是我以后的多态性......还有其他方法和属性只与继承的实体相关,我可以在将来看到一些注入点......

0 个答案:

没有答案