1

我试图将父列和子列命名为更有意义的名称,而不是 Element_ID 和 Element_ID1。

Element 表的生成没有问题,但第二个表是我想要更新列名的表。

我尝试[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);

如果我使用第二个实体,我可以根据需要制作第二个表输出

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);

那么是否可以通过一个实体类使用我想要的列名来生成第二个表?

4

2 回答 2

2

如果我正确理解您的问题,您只需要使用 Fluent API 进行普通的多对多映射:

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,我使用了 Slauma 在当前线程https://stackoverflow.com/a/15147308/13808871上发布的答案,但是切换了关系表上的列名,为了修复它,我交换了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 回答