如何使用 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 的迁移实用工具。该错误通知您,自数据库已构建以来,模型已更改,需要更新。查看此链接: 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);
我们需要转向数据库上下文检查。