我有2个类,Type A有一个Type B的实例以及Type B的集合。我尝试了各种配置,但我似乎无法让它正常工作。如果你能向我解释我做错了什么,或者给我一个有用的资源。我对这些映射越来越好,但是现在它们显然超出了我的理解范围。我已经将课程范围缩小到了重要的属性。
澄清
只有一个与申请人相关的抽奖活动,申请人虽然会位于申请人的集合中,但是获奖作品将在WinnerId字段中填入ID,我希望EF能够映射到正确的申请人。
错误
在'NPlay.Common.Models.SweepstakesApplicant'类型上声明的导航属性'Sweepstakes'已经配置了冲突的映射信息。
类
public SweepstakesConfiguration()
{
Property(c => c.Id).HasColumnName("SweepstakesId");
HasMany(c => c.Applicants)
.WithRequired(c => c.Sweepstakes)
.HasForeignKey(c => c.SweepstakesId);
HasOptional(c => c.WinningApplicant)
.WithRequired(c => c.Sweepstakes)
.Map(c => c.MapKey("WinnerId"));
}
public class SweepstakesApplicant
{
public long Id { get; set; }
public int SweepstakesId { get; set; }
public virtual Sweepstakes Sweepstakes { get; set; }
public int BuyerId { get; set; }
public virtual Buyer Buyer { get; set; }
public int AgentId { get; set; }
public virtual Agent Agent { get; set; }
}
映射
public SweepstakesConfiguration()
{
Property(c => c.Id).HasColumnName("SweepstakesId");
HasOptional(c => c.WinningApplicant)
.WithRequired(c => c.Sweepstakes)
.Map(c => c.MapKey("WinnerId"));
}
public SweepstakesApplicantConfiguration()
{
Property(a => a.Id).HasColumnName("SweepstakesApplicantId");
HasRequired(a => a.Sweepstakes)
.WithMany(s => s.Applicants)
.HasForeignKey(a => a.SweepstakesId)
.WillCascadeOnDelete();
HasRequired(c => c.Sweepstakes)
.WithOptional(c => c.WinningApplicant)
.Map(c => c.MapKey("SweepstakesId"));
HasRequired(a => a.Buyer)
.WithMany(b => b.SweepstakesApplications)
.HasForeignKey(a => a.BuyerId);
HasRequired(a => a.Agent)
.WithMany()
.HasForeignKey(a => a.AgentId);
}
编辑:更新了映射配置和错误。 编辑:进一步修正了标题,令我惊讶的是我收到了多少编辑,我想知道如果人们花更多的时间回答问题然后再进行编辑,这个网站是否会更好:D,嗯,这可能也会被编辑。
答案 0 :(得分:0)
您在SweepstakesId
和one to zero-or-one
关系中使用相同的外键(one-to-many
)。
在名为SweepstakesApplicant
或类似的WinnerOfSweepstakes
上创建一个集合,并说出hasMany,或者从映射中删除导航属性。
答案 1 :(得分:0)
这是我最终的配置。
public SweepstakesConfiguration()
{
Property(c => c.Id).HasColumnName("SweepstakesId");
HasOptional(c => c.WinningApplicant)
.WithMany()
.HasForeignKey(c => c.WinnerId);
}
public SweepstakesApplicantConfiguration()
{
Property(a => a.Id).HasColumnName("SweepstakesApplicantId");
HasRequired(a => a.Sweepstakes)
.WithMany(s => s.Applicants)
.HasForeignKey(a => a.SweepstakesId)
.WillCascadeOnDelete();
HasRequired(a => a.Buyer)
.WithMany(b => b.SweepstakesApplications)
.HasForeignKey(a => a.BuyerId);
HasRequired(a => a.Agent)
.WithMany()
.HasForeignKey(a => a.AgentId);
}