簡體   English   中英

實體框架流暢映射可能

[英]Entity framework fluent mapping many-to-may

嘗試映射此模型時出現問題:

public class Discipline
{
    public int Id {get;set;}
    public string Name{get;set;}
    public virtual ICollection<DisciplineRequirement> Requirements {get;set;}
}

public class DisciplineRequirement
{
    public int DisciplineId {get;set;}
    public int RequiredDiscipline {get;set;}
    public virtual Discipline Discipline {get;set;}
    public virtual Discipline RequiredDiscipline {get;set;}
}

映射代碼:

public class DisciplineMap : EntityTypeConfiguration<Discipline>
{
    public DisciplineMap()
    {
        ToTable("Discipline");

        HasKey(p => p.Id);

        HasMany(p => p.Requirements)
            .WithRequired(p => p.Discipline)
            .HasForeignKey(p => p.DisciplineId);

        HasMany(p => p.Requirements)
            .WithRequired(p => p.RequiredDiscipline)
            .HasForeignKey(p => p.RequiredDisciplineId);
    }
}

public class DisciplineRequirementMap : EntityTypeConfiguration<DisciplineRequeriment>
{
    public DisciplineRequirementMap()
    {
        ToTable("DisciplineRequirement");

        HasKey(p => new
        {
            p.DisciplineId,
            p.RequiredDisciplineId
        });

        HasRequired(p => p.Discipline)
            .WithMany(p => p.Requirements)
            .HasForeignKey(p => p.DisciplineId);

        HasRequired(p => p.RequiredDiscipline)
            .WithMany(p => p.Requirements)
            .HasForeignKey(p => p.RequiredDisciplineId);

    }
}

我有這個錯誤:

在模型生成期間檢測到一個或多個驗證錯誤:要求:FromRole:NavigationProperty“要求”無效。 關聯類型'Discipline_Requirements'中FromRole'Discipline_Requirements_Target'的類型'DisciplineRequeriment'必須與聲明了該NavigationProperty的類型'Discipline'完全匹配。

有人可以在這里給我個燈嗎?

恕我直言,您必須具有兩個導航屬性(或者至少如果只有一個,則無法使用兩個FK對其進行配置)

public class Discipline
{
    public int Id {get;set;}
    public string Name{get;set;}
    public virtual ICollection<DisciplineRequirement> Requirements {get;set;}
    public virtual ICollection<DisciplineRequirement> RequiredBy {get;set;}
}

public class DisciplineRequirement
{
    public int DisciplineId {get;set;}
    public int RequiredDisciplineId {get;set;}
    public virtual Discipline Discipline {get;set;}
    public virtual Discipline RequiredDiscipline {get;set;}
}

public class DisciplineMap : EntityTypeConfiguration<Discipline>
{
    public DisciplineMap()
    {
        ToTable("Discipline");

        HasKey(p => p.Id);
    }
}

public class DisciplineRequirementMap : EntityTypeConfiguration<DisciplineRequeriment>
{
    public DisciplineRequirementMap()
    {
        ToTable("DisciplineRequirement");

        HasKey(p => new
        {
            p.DisciplineId,
            p.RequiredDisciplineId
        });

        HasRequired(p => p.Discipline)
            .WithMany(p => p.RequiredBy)
            .HasForeignKey(p => p.DisciplineId);

        HasRequired(p => p.RequiredDiscipline)
            .WithMany(p => p.Requirements)
            .HasForeignKey(p => p.RequiredDisciplineId);

    }
}

應該足夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM