我遇到了简单映射的问题(使用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
答案 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属性中。
的部分答案 2 :(得分:0)
我安装了EF 5并遇到了同样的问题。 我“发现”的是那个
[列( “名称”)]
public string Name1 {get;组; }
表示 Name1 指向数据库中的字段“名称”。所以我没有更改字段名称,我在课程中更改了属性名称,我让EF知道这个“Name1”指向“Name”。 这有点奇怪的方法,但它的工作方式。 DB可能会在某处写下数据库哈希并检查它是否发生变化。但我还不知道在哪里找到它。
答案 3 :(得分:0)
我找到了解决方案:
Database.SetInitializer<SomeDB>(null);
我们需要启用数据库上下文检查。