在自引用虚拟属性中命名列

时间:2013-02-27 17:54:18

标签: c# .net entity-framework ef-code-first entity-framework-4.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);

那么只用一个实体类就可以使用我想要的列名实现第二个表的生成吗?

1 个答案:

答案 0 :(得分: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");
    });

我希望生成的迁移将遵循此映射并使用提供的表和列名称。