ForeignKey和InverseProperty属性是否始终应用于EF6.x中的多方

时间:2015-07-03 23:22:28

标签: entity-framework-6 foreign-key-relationship

我在项目中使用Entity Framework 6.0代码优先方法。

我有两个实体 - entity1 entity2 ,它们具有一对多的关系,所以一个 entity1 实例可以有一个或多个entity2实例,一个 entity2 实例只有一个 entity1 实例。

问题:对于上述情况,将始终在 entity2 类的定义中提及ForeignKey属性,或者也可以在 entity1 班级定义?同样,InverseProperty属性是否有一条硬性规则,必须始终为 entity2 指定?

更新1

似乎必须始终在关系的多方面即依赖实体的实体中提及ForeignKey,而InverseProperty必须始终在关系一侧的实体中指定,即主体。但是,我不确定。

1 个答案:

答案 0 :(得分:1)

ForeignKeyAttribute

  

可以将注释放在外键属性上并指定关联的导航属性名称,或者将其放在导航属性上并指定关联的外键名称。

对于一对多关系,只有“很多”方面的实体才有一个外键开头,因此它只能在那一侧使用。

InversePropertyAttribute

  

指定表示同一关系另一端的导航属性的反转。

关系有两端,属性可以放在两端。

  • 对于一对多的关系,这里有一个放在“一”端的例子:

    public class Post 
    { 
        public Person CreatedBy { get; set; } 
        public Person UpdatedBy { get; set; }
    }
    
    public class Person 
    { 
        public int Id { get; set; } 
        public string Name { get; set; } 
    
        [InverseProperty("CreatedBy")] 
        public List<Post> PostsWritten { get; set; } 
    
        [InverseProperty("UpdatedBy")] 
        public List<Post> PostsUpdated { get; set; }
    }
    

    https://msdn.microsoft.com/en-us/data/jj591583.aspx#Relationships

  • 这是“很多”方面的一个例子:

    [Table("Department", Schema = "dbo")]  
    public class DepartmentMaster  
    {  
        public ICollection<Employee> PrimaryEmployees { get; set; }  
        public ICollection<Employee> SecondaryEmployees { get; set; }  
    }  
    
    [Table("Employee", Schema = "dbo")]  
    public class Employee  
    {  
        [InverseProperty("PrimaryEmployees")]  
        public DepartmentMaster PrimaryDepartment { get; set; }  
    
        [InverseProperty("SecondaryEmployees")]  
        public DepartmentMaster SecondaryDepartment { get; set; }  
    }  
    

    http://www.c-sharpcorner.com/UploadFile/ff2f08/entity-framework-code-first-data-annotations/