如何使用 EF 4.3.1 映射列名

本文关键字:映射 何使用 EF | 更新日期: 2023-09-27 18:33:54

我在简单映射方面遇到问题(使用 EF 4.3.1 - 代码优先方法)

public class Someclass
    {
        public virtual int ID { get; set; }
        public virtual string Name { get; set; }
    } 

和表某个类与 int ID 和 varchar someclass_name。现在我想做的是将名称someclass_name

 modelBuilder.Entity<Someclass>()
             .Property(r => r.Name).HasColumnName("someclass_name");

但是 id 不起作用,异常说:"自创建数据库以来,上下文已更改。请考虑使用代码优先迁移来更新数据库 (http://go.microsoft.com/fwlink/?LinkId=238269)。

我也尝试通过以下方式做到这一点:

modelBuilder.Configurations.Add(new SomeclassMap());
public class SomeclassMap : EntityTypeConfiguration<Someclass>
    {
        public SomeclassMap() {
          //  this.Property(r => r.Name).HasColumnName("someclass_name");
            Map(r =>
            {
                Property(m => m.Name).HasColumnName("restaurant_name");
            });
        }
    }

有人可以告诉我我做错了什么吗?THX

如何使用 EF 4.3.1 映射列名

你将需要使用 EF 4.3 的迁移实用工具。该错误通知您,自数据库已构建以来,模型已更改,需要更新。查看此链接: http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-code-based-migrations-walkthrough.aspx

不确定它是否会避免迁移通知,但您可以尝试将 [Column("someclass_name")] 添加到 Name 属性中。

请参阅名为将属性映射到具有不同名称的列的部分

我安装了EF 5并遇到了同样的问题。 我"发现"的是

[列("名称")]
公共字符串 Name1 { get; set; }

表示 Name1 指向 DB 中的字段"名称"。 所以我没有更改字段名称,我更改了类中的属性名称,并让 EF 知道这个"Name1"指向"Name"。这是一种有点奇怪的方法,但它以这种方式工作。数据库可能会在某处写下数据库哈希并检查它是否更改。但我还不知道在哪里可以找到它。

我找到了解决方案:

Database.SetInitializer<SomeDB>(null);

我们需要转向数据库上下文检查