Dis*_*ile 36 c# entity-framework ef-code-first
我在尝试将我的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");
}
);
}
}
Run Code Online (Sandbox Code Playgroud)
我希望我的桌子是:
tblDinners
colID
colHost
colDate
colTitle
colAddress
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
属性表达式'c => new <> f__AnonymousType0`5(colID = c.DinnerID,colTitle = c.Title,colHost = c.HostedBy,colDate = c.EventDate,colAddress = c.Address)'无效.表达式应该表示一个属性:C#:'t => t.MyProperty'VB.Net:'Punction(t)t.MyProperty'.当指定多个属性时,使用匿名类型:C#:'t => new {t.MyProperty1,t.MyProperty2}'VB.Net:'Function(t)New From {t.MyProperty1,t.MyProperty2}'.
映射列的正确语法是什么?
如果您让我知道如何将Address属性映射到名为Address的子类,则可以获得奖励积分:
public class Address
{
City
State
Zip, etc
}
Run Code Online (Sandbox Code Playgroud)
Kal*_*exx 52
我相信你只需要做
modelBuilder.Entity<Dinner>().Property(x => x.HostedBy).HasColumnName("colHost");
Run Code Online (Sandbox Code Playgroud)
对于您希望db列名称的名称与其属性名称不同的所有列.
编辑:经过一些搜索,我遇到了这个问题.从那个判断和你发布的错误来看,似乎mc.Properties()
更多的是将值拆分到不同的表中,而不是实际重命名这些表名.我认为重命名仍然需要手动完成.
这又是来自谷歌搜索的信息,我不知道我是否只是错过了一件事来做你想要的:).
Kam*_*yar 44
如何使用DataAnnotations?
[Key]
[Column("ColID", TypeName="int")]
public int DinnerID { get; set; }
Run Code Online (Sandbox Code Playgroud)
您可以在http://msdn.microsoft.com/en-us/data/gg193958找到包含样本的完整列表