EF6 Code First 混淆使用同一实体的 2 个属性
EF6 Code First confusion when having 2 properties using the same entity
我正在使用 Code First 方法创建我的数据库,该方法目前运行良好。但是我有一个小问题,EF6 似乎无法理解或者我做错了。
我有 class Project
有一个 属性 CreatedBy
类型 Person
和另一个 属性 Members
输入 ICollection<Person>
;
public class Project
{
// ...
public Person CreatedBy { get; set; }
public virtual ICollection<Person> Members { get; set; }
}
在classPerson
中我添加了以下内容属性:
public virtual ICollection<Project> Projects { get; set; }
告诉 EF6 2 classes 之间应该存在多对多关系。
如果我运行一个Add-Migration
和Update-Database
在Visual Studio中用CreatedBy
在Project
中注释掉class , 将会发生的是在数据库中创建一个 Project <-> Person
table.
如果我再次取消对 CreatedBy
属性 和 运行 相同脚本的注释,Project <-> Person
table 将被删除并且 Project
和 Person
tables 得到一个新列,两者之间有一个外键,将其更改为一对一关系。
我如何使用 Code First 在我的 Project
和 Person
class 之间建立关系,这样我就可以如何使一对多(1 人可以创建许多项目)和多对多(可以将许多人添加到许多项目)?
我还没有验证这一点,但是如果您为创建者指定明确的外键,应该足以区分这两种不同的关系:
// make nullable if CreatedBy is not required
[ForeignKey("CreatedBy")]
public int CreatedById { get; set; }
public Person CreatedBy { get; set; }
您需要使用 Fluent API 配置实体:
class ProjectConfiguration : EntityTypeConfiguration<Project>
{
public ProjectConfiguration()
{
HasRequired(e => e.CreatedBy).WithMany(); // one-to-many
HasMany(e => e.Members).WithMany(); //many-to-many
}
}
public class Context : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new ProjectConfiguration());
}
}
关于 Fluent 的更多详细信息 API:http://msdn.microsoft.com/en-us/data/jj591617.aspx
配置与 Fluent 的关系 API:http://msdn.microsoft.com/en-us/data/jj591620
我正在使用 Code First 方法创建我的数据库,该方法目前运行良好。但是我有一个小问题,EF6 似乎无法理解或者我做错了。
我有 class Project
有一个 属性 CreatedBy
类型 Person
和另一个 属性 Members
输入 ICollection<Person>
;
public class Project
{
// ...
public Person CreatedBy { get; set; }
public virtual ICollection<Person> Members { get; set; }
}
在classPerson
中我添加了以下内容属性:
public virtual ICollection<Project> Projects { get; set; }
告诉 EF6 2 classes 之间应该存在多对多关系。
如果我运行一个Add-Migration
和Update-Database
在Visual Studio中用CreatedBy
在Project
中注释掉class , 将会发生的是在数据库中创建一个 Project <-> Person
table.
如果我再次取消对 CreatedBy
属性 和 运行 相同脚本的注释,Project <-> Person
table 将被删除并且 Project
和 Person
tables 得到一个新列,两者之间有一个外键,将其更改为一对一关系。
我如何使用 Code First 在我的 Project
和 Person
class 之间建立关系,这样我就可以如何使一对多(1 人可以创建许多项目)和多对多(可以将许多人添加到许多项目)?
我还没有验证这一点,但是如果您为创建者指定明确的外键,应该足以区分这两种不同的关系:
// make nullable if CreatedBy is not required
[ForeignKey("CreatedBy")]
public int CreatedById { get; set; }
public Person CreatedBy { get; set; }
您需要使用 Fluent API 配置实体:
class ProjectConfiguration : EntityTypeConfiguration<Project>
{
public ProjectConfiguration()
{
HasRequired(e => e.CreatedBy).WithMany(); // one-to-many
HasMany(e => e.Members).WithMany(); //many-to-many
}
}
public class Context : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new ProjectConfiguration());
}
}
关于 Fluent 的更多详细信息 API:http://msdn.microsoft.com/en-us/data/jj591617.aspx
配置与 Fluent 的关系 API:http://msdn.microsoft.com/en-us/data/jj591620