1

親列と子列に、Element_IDとElement_ID1ではなく、より意味のある名前を付けようとしています。

Elementテーブルは問題なく生成されますが、2番目のテーブルは列名を更新したいものです。

[Column("ParentID")]親プロパティの減速の上に属性を追加しようとしましたが、生成されたテーブルには影響しません。

エンティティクラス

public class Element
{
    public Guid ID { get; set; } 
    public string Title { get; set; }
    public int Status { get; set; }       

    public virtual List<Element> Parent { get; set; }
    public virtual List<Element> Child { get; set; }
}

生成された移行

CreateTable(
    "dbo.ElementElements",
    c => new
        {
            Element_ID = c.Guid(nullable: false),
            Element_ID1 = c.Guid(nullable: false),
        })
    .PrimaryKey(t => new { t.Element_ID, t.Element_ID1 })
    .ForeignKey("dbo.Elements", t => t.Element_ID)
    .ForeignKey("dbo.Elements", t => t.Element_ID1)
    .Index(t => t.Element_ID)
    .Index(t => t.Element_ID1);

2番目のエンティティをそのまま使用すると、2番目のテーブルを必要に応じて出力できます

public class Hierarchy
{
    public Guid ID { get; set; } 
    public virtual Guid ParentID { get; set; }
    public virtual Element Parent { get; set; }
    public virtual Guid ChildID { get; set; }
    public virtual Element Child { get; set; }
}

次の作成スクリプトを生成しました

CreateTable(
    "dbo.Hierarchies",
    c => new
        {
            ID = c.Guid(nullable: false),
            ParentID = c.Guid(nullable: false),
            ChildID = c.Guid(nullable: false),
        })
    .PrimaryKey(t => t.ID)
    .ForeignKey("dbo.Elements", t => t.ParentID)
    .ForeignKey("dbo.Elements", t => t.ChildID)
    .Index(t => t.ParentID)
    .Index(t => t.ChildID);

では、1つのエンティティクラスだけで必要な列名を使用して2番目のテーブルを生成することは可能ですか?

4

2 に答える 2

2

私があなたの質問を正しく理解していれば、FluentAPIを使用した通常の多対多のマッピングが必要です。

modelBuilder.Entity<Element>()
    .HasMany(e => e.Parent)
    .WithMany(e => e.Child)
    .Map(m => {
        m.ToTable("ElementMap"); // name of the link table
        m.MapLeftKey("ParentID");
        m.MapRightKey("ChildID");
    });

生成された移行はこのマッピングを尊重し、提供されたテーブル名と列名を使用することを期待します。

于 2013-02-28T22:58:46.337 に答える
0

EF 6の場合、現在のスレッドhttps://stackoverflow.com/a/15147308/13808871にSlaumaによって投稿された回答を使用しましたが、関係テーブルの列名が切り替えられました。これを修正するために、 MapLeftKeyおよびMapRightKey構成メソッドのパラメーター。

modelBuilder.Entity<Element>()
                .HasMany(e => e.Parent)
                .WithMany(e => e.Child)
                .Map(m =>
                {
                    m.ToTable("ElementMap");
                    m.MapLeftKey("ChildID");
                    m.MapRightKey("ParentID");
                });

お役に立てれば!

詳細については、Microsoftのドキュメントを参照してください

于 2022-01-14T22:42:20.097 に答える