Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 是否可以先根据EF代码中的条件映射属性?_Entity Framework_Ef Code First_Entity Framework 4.1 - Fatal编程技术网

Entity framework 是否可以先根据EF代码中的条件映射属性?

Entity framework 是否可以先根据EF代码中的条件映射属性?,entity-framework,ef-code-first,entity-framework-4.1,Entity Framework,Ef Code First,Entity Framework 4.1,我有一个员工实体,它有多个单位实体,它们也以各种方式关联(例如,作为经理、主管等)。他们与单位的关系是在UnitRelationships表中定义的,该表除包含EmployeeId、UnitId和RelationshipTypeId属性外,还包含IsActive属性 我想做的是在员工实体上创建特定属性,例如: SupervisedUnits {get;set;} ManagedUnits{get;set;} 。。。并配置映射,以便“SuperviedUnits”仅返回存在活动(IsActive

我有一个员工实体,它有多个单位实体,它们也以各种方式关联(例如,作为经理、主管等)。他们与单位的关系是在UnitRelationships表中定义的,该表除包含EmployeeId、UnitId和RelationshipTypeId属性外,还包含IsActive属性

我想做的是在员工实体上创建特定属性,例如:

SupervisedUnits {get;set;}
ManagedUnits{get;set;}
。。。并配置映射,以便“SuperviedUnits”仅返回存在活动(IsActive=true)关系的单元和RelationshipTypeId='Supervisor'。与ManagedUnits相同的类型

那么,有没有一种方法可以先在EF代码中这样做,这样我就可以在LINQ to Entities查询中实际使用这些属性(SupervisedUnits和ManagedUnits)


谢谢

可能有几种方法可以做到这一点

  • “主动”关系是单位和员工之间的一对多关系,“非主动”关系是多对多关系。因此,将它们设置为两个不同的关系,当关系处于非活动状态时,将
    主管
    移动到
    非活动主管
    。这样做可以提供一个
    SupervisedUnits
    导航属性(如您所需)和一个
    InActiveSupervisedUnits
    属性

  • 该关系是多对多关系,具有诸如
    IsActive
    ActiveFrom
    ActiveTo
    等属性。现在,关系确实需要成为一个实体。可以对UnitRelationship实体使用继承:

    public class SupervisorUnitRelationShip : UnitRelationship{ }
    
    公共类管理器运行关系:UnitRelationship
    {
    }

  • 然后,您可以按类型添加导航属性:

    public virtual Collection<SupervisorUnitRelationship> SupervisedRelations {get;set;}
    public virtual Collection<ManagerUnitRelationship> ManagedRelations {get;set;}
    
    公共虚拟集合受监控的关系{get;set;}
    公共虚拟集合管理关系{get;set;}
    
    要进入单位,你必须通过单位关系


    var-superviedUnits=superviedRelations.Units

    听起来像是要将继承引入模型。您说它是代码优先,但您的问题的措辞似乎是数据库优先。你是否对数据库进行了反向工程?