代码之家  ›  专栏  ›  技术社区  ›  bielu000

更改导航属性的默认列名

  •  5
  • bielu000  · 技术社区  · 7 年前

    我有以下课程

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

    我想更改属性树的默认数据库列名。作为在数据库中查找“TreeId”列的默认实体框架,但根据我们的名称约定,该列应命名为“tree\u id”

     modelBuilder.Entity<TreeItem>().Property(t => t.Tree).HasColumnName("tree_id");
    

    Ef向我抛出异常消息:

    无法对实体类型“TreeItem”调用属性“Tree”的属性 用于配置标量属性。

    是否可以将属性树的默认列名从“TreeId”更改为“Tree\u id”?

    2 回复  |  直到 7 年前
        1
  •  7
  •   ashin    7 年前

    尝试使用MapKey():

    modelBuilder.Entity<TreeItem>()
                .HasRequired(it => it.Tree)
                .WithMany()
                .Map(m => m.MapKey("tree_id"));
    

    编辑

    here :

    modelBuilder.Entity<TreeItem>()
                .Property<long>("TreeId")
                .HasColumnName("tree_id");
    
        2
  •  2
  •   DenseCrab    7 年前

    当两个实体相互关联时,我总是使用虚拟对象。执行此操作时,还可以按以下方式指定FK的列名:

    public class TreeItem
    {
        public long Id { get; set; }
        [Column("tree_id")]
        public int TreeId { get; set; }
        [ForeignKey("TreeId")]
        public virtual Tree Tree { get; set; }
        public string Model { get; set; }
        public string Version { get; protected set; }
        public string Index { get; protected set; }
    }
    
    public class Tree
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    

    enter image description here