我在项目中使用Entity Framework 6.0代码优先方法。
我有两个实体 - entity1 和 entity2 ,它们具有一对多的关系,所以一个 entity1 实例可以有一个或多个entity2实例,一个 entity2 实例只有一个 entity1 实例。
问题:对于上述情况,将始终在 entity2 类的定义中提及ForeignKey属性,或者也可以在 entity1 班级定义?同样,InverseProperty属性是否有一条硬性规则,必须始终为 entity2 指定?
更新1
似乎必须始终在关系的多方面即依赖实体的实体中提及ForeignKey,而InverseProperty必须始终在关系一侧的实体中指定,即主体。但是,我不确定。
答案 0 :(得分:1)
可以将注释放在外键属性上并指定关联的导航属性名称,或者将其放在导航属性上并指定关联的外键名称。
对于一对多关系,只有“很多”方面的实体才有一个外键开头,因此它只能在那一侧使用。
指定表示同一关系另一端的导航属性的反转。
关系有两端,属性可以放在两端。
对于一对多的关系,这里有一个放在“一”端的例子:
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/