更改导航属性的默认列名称

bie*_*000 3 c# asp.net entity-framework-core asp.net-core

我有以下课程

public class TreeItem
{
    public long Id { get; set; }
    public Tree Tree { get; set; }
    public string Model { get; set; }
    public string Version { get; protected set; }
    public string Index { get; protected set; }
}
Run Code Online (Sandbox Code Playgroud)

并且我想更改属性树的默认数据库的列名称。作为默认实体框架,在databse中寻找“ TreeId”列,但是我们的名字约定说此列应命名为“ tree_id”

如果我尝试将其设置如下:

 modelBuilder.Entity<TreeItem>().Property(t => t.Tree).HasColumnName("tree_id");
Run Code Online (Sandbox Code Playgroud)

Ef向我抛出一条异常消息:

由于实体类型“ TreeItem”已配置为导航属性,因此无法为属性“ Tree”调用“属性”。属性只能用于配置标量属性。

是否可以将属性Tree的默认列名称从“ TreeId”更改为“ tree_id”?

ash*_*hin 5

尝试使用MapKey():

modelBuilder.Entity<TreeItem>()
            .HasRequired(it => it.Tree)
            .WithMany()
            .Map(m => m.MapKey("tree_id"));
Run Code Online (Sandbox Code Playgroud)

编辑

对于EF Core,您可能必须使用此处所述的解决方法:

modelBuilder.Entity<TreeItem>()
            .Property<long>("TreeId")
            .HasColumnName("tree_id");
Run Code Online (Sandbox Code Playgroud)