1

我有 2 个类,类型 A 有一个类型 B 的单个实例以及一个类型 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,嗯,这可能也会被编辑。

4

2 回答 2

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);
    }
于 2013-11-12T15:04:39.087 回答
0

您在和关系中使用相同的外键 ( SweepstakesId) 。one to zero-or-oneone-to-many

SweepstakesApplicant要么在被调用的或类似的上创建一个集合WinnerOfSweepstakes并说 hasMany,要么从映射中删除导航属性。

于 2013-11-12T13:41:48.560 回答