0

こんにちは私の問題は、Add-Migrationを実行すると、データベースモデルが次のようになることです。FKは2回ではなく4回。

CreateTable(
            "dbo.IntressentIntressent",
            c => new
                {
                    ParentIntressentId = c.Int(nullable: false),
                    ChildIntressentId = c.Int(nullable: false),
                    Aktieantal = c.Int(nullable: false),
                    Agare = c.Boolean(nullable: false),
                    Firmatecknare = c.Boolean(nullable: false),
                    Registreringsanmalan = c.Boolean(nullable: false),
                    FirmatecknareGeneralfullmakt = c.Boolean(nullable: false),
                    Revisor = c.Boolean(nullable: false),
                })
            .PrimaryKey(t => new { t.ParentIntressentId, t.ChildIntressentId })
            .ForeignKey("dbo.Intressent", t => t.ParentIntressentId)
            .ForeignKey("dbo.Intressent", t => t.ChildIntressentId)
            .ForeignKey("dbo.Intressent", t => t.ParentIntressentId)
            .ForeignKey("dbo.Intressent", t => t.ChildIntressentId)
            .Index(t => t.ParentIntressentId)
            .Index(t => t.ChildIntressentId)
            .Index(t => t.ParentIntressentId)
            .Index(t => t.ChildIntressentId);

私のクラスはこんな感じです。onmodelCreating EFでfkステートメントを削除すると、追加されます。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {   
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
        modelBuilder.Entity<Entity.IntressentIntressent>().HasKey(k => new
       {k.ParentIntressentId, k.ChildIntressentId });

       modelBuilder.Entity<Entity.Intressent>().HasMany(c => c.ParentIntressenter)
                   .WithRequired().HasForeignKey(cp => cp.ParentIntressentId);

       modelBuilder.Entity<Entity.Intressent>().HasMany(p => p.ChildIntressenter)
                   .WithRequired().HasForeignKey(cp => cp.ChildIntressentId);

   }

エンティティは次のようになります

public class Intressent
{

    private ObservableCollection<IntressentIntressent> _parentIntressenter;
    public virtual ObservableCollection<IntressentIntressent> ParentIntressenter
    {
         get { return _parentIntressenter ?? (_parentIntressenter = new  
            ObservableCollection<IntressentIntressent>()); }
        set { _parentIntressenter = value; }
    }
}

public class IntressentIntressent
{
    [DisplayName("ParentIntressentId")]
    [Description("ParentIntressentId")]
    [Key, ForeignKey("ParentIntressent")]
    public int ParentIntressentId { get; set; }
    [DisplayName("ChildIntressentId")]
    [Description("ChildIntressentId")]
    [Key, ForeignKey("ChildIntressent")]
    public int ChildIntressentId { get; set; }


    [ForeignKey("ParentIntressent")]
    public Intressent ParentIntressent { get; set; }
    [ForeignKey("ChildIntressent")]
    public Intressent ChildIntressent { get; set; }

    [Required]
    [DisplayName("Aktieantal")]
    [Description("Aktieantal")]
    public int Aktieantal { get; set; }
}
4

1 に答える 1

1

関係を複製しました。あなたIntressentIntressentは、データ注釈を使用して、ナビゲーションプロパティとそれに関連する外部キーを定義しました。次に、クラスの流暢なマッピングを定義しましIntressentたが、そのマッピングは、リレーションの反対側にあるデータ注釈を反映していません。その結果、関係が2回定義されます。流暢なマッピングを次のように置き換えます。

   modelBuilder.Entity<Entity.Intressent>()
               .HasMany(c => c.ParentIntressenter)
               .WithRequired(i => i.ParentInterssenter)
               .HasForeignKey(cp => cp.ParnetIntressentId);

   modelBuilder.Entity<Entity.Intressent>()
               .HasMany(p => p.ChildIntressenter)
               .WithRequired(i => i.ChildIntressent)
               .HasForeignKey(cp => cp.ChildIntressentId);

反対を定義することにより、WithRequiredこれらのナビゲーションプロパティを単一のリレーションにペアリングします。

于 2013-03-05T08:36:33.147 に答える