首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >外键名称EF6

外键名称EF6
EN

Stack Overflow用户
提问于 2015-01-20 19:40:15
回答 2查看 225关注 0票数 0

我的实体有一个List<SecondEntityDTO>。当EF生成表时,表SecondEntities中有一个列名FirstEntityDTO_id。我希望这个专栏被命名为"ParentEntity_id“。我怎么能这么做?

我试着注释了SecondEntityDTO列表和其他一些东西..。

Edit1:,我相信你们,女士们。

这是我的MainEntity:

代码语言:javascript
复制
[Table("MainEntities")]
public class MainEntityDTO
{
    public string Title { get; set; }
    [Key]
    public int id { get; set; }
    public List<SubEntityDTO> SubEntities { get; set; }
}

这是SubEntityDTO

代码语言:javascript
复制
[Table("SubEntities")]
public class SubEntityDTO
{
    [Key]
    public int id { get; set; }
    public string Title { get; set; }
}

这就是移民:

代码语言:javascript
复制
public override void Up()
    {            
        CreateTable(
            "dbo.MainEntities",
            c => new
                {
                    id = c.Int(nullable: false, identity: true),
                    Title = c.String(),
                    Discriminator = c.String(nullable: false, maxLength: 128),
                })
            .PrimaryKey(t => t.id);

        CreateTable(
            "dbo.SubEntities",
            c => new
                {
                    id = c.Int(nullable: false, identity: true),
                    Title = c.String(),
                    MainEntityDTO_id = c.Int(),
                })
            .PrimaryKey(t => t.id)
            .ForeignKey("dbo.MainEntities", t => t.MainEntityDTO_id)
            .Index(t => t.MainEntityDTO_id);
    }

注意SubEntities表上第三列的名称!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-20 20:13:23

此外,您也可以使用流利阿皮进行同样的操作,例如,重写上下文的OnModelCreating方法并执行以下操作:

代码语言:javascript
复制
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
   modelBuilder.Entity<SecondEntity>().Property(s => s.FirstEntityDTO_id).HasColumnName("ParentEntity_id");
}

更新

为什么不编辑指定该表的列的Func<>。正如您所看到的,您正在创建一个匿名类型,因此您可以更改该列的名称,例如:

代码语言:javascript
复制
 CreateTable(
            "dbo.SubEntities",
            c => new
            {
                id = c.Int(nullable: false, identity: true),
                Title = c.String(),
                ParentEntity_id = c.Int(),
            })
            .PrimaryKey(t => t.id)
            .ForeignKey("dbo.MainEntities", t => t.ParentEntity_id)
            .Index(t => t.ParentEntity_id);

如果这样做,请记住在Down方法中更改该属性的名称,但是如果您已经执行了该脚本,则不要在Down方法中更改FK名称。再次执行指定该脚本名称的Update Database命令。这将删除这些表,并且将再次使用Up方法创建这些表,但是现在使用您想要的FK名称-- it.In,此时您可以在Down方法中更改FK名称:

代码语言:javascript
复制
 public override void Down()
 {
        DropForeignKey("dbo.SubEntities", "ParentEntity_id", "dbo.MainEntities");
        DropIndex("dbo.SubEntities", new[] { "ParentEntity_id" });
        DropTable("dbo.SubEntities");
        DropTable("dbo.MainEntities");
 }
票数 1
EN

Stack Overflow用户

发布于 2015-01-20 19:42:55

将以下代码放入您的SubEntity类:

代码语言:javascript
复制
[ForeignKey("ParentEntity")]
public int ParentEntity_id { get; set; }

public virtual MainEntity ParentEntity { get; set; }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28053787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档