[英]Entity Framework Code First navigation issue
我正在尝试设置一个导航属性,该属性将容纳另一个表的零个或多个元素。 实体框架似乎存在的问题是另一个表具有复合主键。
public class Alpha
{
public int Id { get; set; }
public int? BetaId { get; set; }
public virtual ICollection<Beta> Beta { get; set; }
public string Name { get; set; }
}
public class Beta
{
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int SequenceNumber { get; set; }
public string Name { get; set; }
}
public class ABContext : DbContext
{
public DbSet<Alpha> Alpha { get; set; }
public DbSet<Beta> Beta { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Beta>()
.HasKey(b => new { b.Id, b.SequenceNumber });
}
}
我不确定如何正确建立关系。 我尝试了几种不同的方法。 实体框架要么抱怨没有使用Beta类中的两个键来定义导航属性,要么抱怨在Alphas表中创建一对额外的列,这些列无法正确链接表。
目标是Alpha应该基于Beta.Id
持有一组零个或多个Beta.Id
。 Beta可能属于零个或多个Alpha。 但是,我对Beta与Alpha关系并不真正感兴趣。
有任何想法吗?
因此,让我们看一下您的要求:
Alpha应该拥有零个或多个Beta的集合...。Beta可能属于零个或多个Alpha
这是多对多关系,因此您必须进行映射。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Beta>()
.HasKey(b => new { b.Id, b.SequenceNumber });
modelBuilder.Entity<Alpha>()
.HasMany(a => a.Beta)
.WithMany();
}
这将在数据库中创建带有trhee列(可能称为Alpha_Id,Beta_Id和Beta_SequenceNumber)的其他表。
我仍然不理解, 基于Beta.Id意味着什么。 如果alpha只能保存具有相同Beta.Id的记录,则可能必须在应用程序逻辑中对此进行控制。 这需要通过映射来实施其他复杂的构造。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.