如何使用EF 4.3.1映射列名?

时间:2012-05-12 15:12:04

标签: c# asp.net-mvc

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

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

someclass ,其中int ID 和varchar someclass_name 。 现在我要做的是将名称 someclass_name

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

但是id不起作用,异常说:“自创建数据库以来,上下文已经发生了变化。请考虑使用Code First Migrations来更新数据库(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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

请参阅名为Map a Property to a Column with a Different Name

的部分

答案 2 :(得分:0)

我安装了EF 5并遇到了同样的问题。  我“发现”的是那个

  
    

[列( “名称”)]
    public string Name1 {get;组; }

  

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

答案 3 :(得分:0)

我找到了解决方案:

Database.SetInitializer<SomeDB>(null);

我们需要启用数据库上下文检查