C# 如何配置两个实体之间的1对1关系,其中一个是主体?
我使用实体框架和fluent API来配置绑定。我的两个实体如下所示:C# 如何配置两个实体之间的1对1关系,其中一个是主体?,c#,entity-framework,C#,Entity Framework,我使用实体框架和fluent API来配置绑定。我的两个实体如下所示: public class Matter { #region Properties /// <summary> /// Primary key /// </summary> public int Id { get; set; } /// <summary> /// Navigation: the most recent Relati
public class Matter
{
#region Properties
/// <summary>
/// Primary key
/// </summary>
public int Id { get; set; }
/// <summary>
/// Navigation: the most recent Relativity activity for the Matter
/// </summary>
public virtual RelativityActivity RelativityRecentActivity { get; set; }
#endregion
}
public class RelativityActivity
{
#region Properties
/// <summary>
/// Primary key
/// </summary>
public int Id { get; set; }
/// <summary>
/// Foreign key: the Matter that the Relativity Activity entry is associated with
/// </summary>
public Matter Matter { get; set; }
#endregion
}
modelBuilder.Entity<RelativityActivity>().HasRequired(m => m.Matter).WithRequiredDependent(m => m.RelativityRecentActivity).Map(m => m.MapKey("matter")).WillCascadeOnDelete(true);
对于相对性活动
,以及:
modelBuilder.Entity<Matter>().HasOptional(m => m.RelativityRecentActivity).WithRequired(m => m.Matter);
modelBuilder.Entity().has可选(m=>m.RelativityRecentActivity).WithRequired(m=>m.Matter);
对于问题
我在关系中有两个绑定,因为没有物质
绑定,我无法确定主端错误。但是现在我得到了一个关于多重性的错误
编辑以澄清:
RelativityActivity
表中的外键列不是Id
列。它实际上是另一个名为matter
的专栏。我尝试使用绑定中的Map
函数来指定它。db模式只能强制执行0..1-n
关联。1:1
关联始终涉及两个相互引用的外键,或同时是另一个主键外键的主键
您可以按照以下方式对1:1关联进行建模:
modelBuilder.Entity<Matter>().HasOptional(m => m.RelativityRecentActivity)
.WithRequired(m => m.Matter);
RelativityActivity.Id
是关系中的外键,还是RelativityActivity.MatterId
表中有第二个字段作为外键?答案很可能是“重要的”。不,外键列实际上是表中另一列,名为“重要”。我想,在我的绑定中,我使用Map
来指定这一点。无论如何,这就是我的意图。因此,如果我能够调整模式,使RelativityActivity
的FK toMatter
也成为表的PK,那么我的绑定逻辑将适用于EF?当然,如果可以更改模式,则可以使映射按您希望的方式工作。也许最简单的方法是查看EF如何使用您选择的映射创建数据库,并将其复制到现有数据库中。谢谢。我认为调整模式使这一点得以实现。要么是那样,要么就是你的措辞!谢谢
modelBuilder.Entity<Matter>().HasMany(m => m.RelativityRecentActivity)
.WithRequired(r => r.Matter)
.Map(m => m.MapKey("matter");