我在尝试将EF 4.1 Code First模型映射到数据库时遇到问题。当数据库完全匹配代码时,一切正常,但当我尝试映射列名称不同时,我遇到了问题。
我正在关注一个必须使用其中一个CTP构建的教程,因为有些方法缺失/不同。
我的模型看起来像:
public class Dinner
{
public int DinnerID { get; set; }
public string HostedBy { get; set; }
public DateTime EventDate { get; set; }
public string Title { get; set; }
public string Address { get; set; }
}
public class NerdDinners : DbContext
{
public DbSet<Dinner> Dinners { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// THIS IS WHAT I TRIED BUT IT IS FAILING
modelBuilder.Entity<Dinner>().Map(mc =>
{
mc.Properties(c => new {
colID = c.DinnerID,
colTitle = c.Title,
colHost = c.HostedBy,
colDate = c.EventDate,
colAddress = c.Address
});
mc.ToTable("tblDinner");
}
);
}
}
我希望我的桌子是:
tblDinners
colID
colHost
colDate
colTitle
colAddress
我收到此错误:
属性表达式'c =&gt;新 &lt;&gt; f__AnonymousType0`5(colID = c.DinnerID,colTitle = c.Title, colHost = c.HostedBy,colDate = c.EventDate,colAddress = c.Address)' 无效。表达应该 代表一个属性:C#:'t =&gt; t.MyProperty'VB.Net:'功能(t) t.MyProperty”。指定时 多个属性使用匿名 类型:C#:'t =&gt;新{t.MyProperty1, t.MyProperty2}'VB.Net:'功能(t) 新来自{t.MyProperty1, t.MyProperty2}'。
映射列的正确语法是什么?
奖励积分如果您让我知道如何将地址属性映射到名为地址的子类:
public class Address
{
City
State
Zip, etc
}
答案 0 :(得分:51)
我相信你只需做
modelBuilder.Entity<Dinner>().Property(x => x.HostedBy).HasColumnName("colHost");
对于您希望db列名称的名称与其属性名称不同的所有列。
修改:经过多次搜索后,我遇到了this question。从那个和你发布的错误来看,似乎mc.Properties()
更多的是将值拆分到不同的表中,而不是实际重命名这些表名。我认为重命名仍然需要手动完成。
这又是来自谷歌搜索的信息,我不知道我是否只是错过了一件事来做你想要的:)。
答案 1 :(得分:42)
如何使用DataAnnotations?
[Key]
[Column("ColID", TypeName="int")]
public int DinnerID { get; set; }
找到包含样本的完整列表