1

我遇到了简单映射的问题(使用 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。现在我想做的是用someclass_name映射名称

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

但是 id 不起作用并且异常说:“自创建数据库以来,上下文已更改。考虑使用 Code First 迁移来更新数据库 (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");
            });
        }
    }

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

4

4 回答 4

1

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

于 2012-05-12T15:19:49.620 回答
0

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

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

于 2012-05-12T16:56:22.623 回答
0

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

[Column("Name")]
公共字符串 Name1 { get; 放; }

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

于 2012-05-13T08:41:15.930 回答
0

我找到了解决方案:

Database.SetInitializer<SomeDB>(null);

我们需要打开数据库上下文检查

于 2012-05-13T11:02:26.557 回答