在CTP 4中,我们可以选择我们想要映射的属性:
this.MapSingleType(i => new
{
i.Id,
i.OriginalFileName,
i.Extension,
i.MimeType,
i.Width,
i.Height,
i.ImageStoreLocationId,
i.AlternateText,
i.ImageData
});
我们如何在CTP5中实现这一目标?
我尝试使用以下Map配置,但这似乎不起作用,因为我仍然必须明确忽略(this.Ignore(..))我不想映射的属性:
Map(config =>
{
config.Properties(i => new
{
i.OriginalFileName,
i.Extension,
i.MimeType,
i.Width,
i.Height,
i.ImageStoreLocationId,
i.AlternateText,
i.ImageData
});
config.ToTable("Images");
});
考虑到新的API应该更流畅,但我必须编写更多代码才能实现同样的功能。
由于 本
答案 0 :(得分:6)
此博客文章包含ctp 5映射样本。
http://blogs.msdn.com/b/adonet/archive/2010/12/14/ef-feature-ctp5-fluent-api-samples.aspx
需要一个clr-nullable属性:
modelBuilder.Entity<Product>()
.Property(p => p.Name)
.IsRequired();
更改字符串长度:
modelBuilder.Entity<Product>()
.Property(p => p.Name)
.HasMaxLength(50);
关闭身份:
modelBuilder.Entity<Product>()
.Property(p => p.ProductId)
.HasDatabaseGenerationOption(DatabaseGenerationOption.None);
忽略某个属性:
modelBuilder.Entity<Person>()
.Ignore(p => p.Name);
表&amp;列映射 更改列名称:
modelBuilder.Entity<Category>()
.Property(c => c.Name)
.HasColumnName("cat_name");
更改表名:
modelBuilder.Entity<Category>()
.ToTable("MyCategories");
使用架构更改表名:
modelBuilder.Entity<Category>()
.ToTable("MyCategories", "sales");
答案 1 :(得分:1)
CTP5在数据注释和流畅的API中确实更强大和灵活。例如,在CTP4中,如果我们想要从映射中排除属性,我们必须使用 MapSingleType 显式地映射其他所有,以便跳过我们不想要的那个,比如你提到的方式。
在CTP5中,这可以通过在属性上使用[NotMapped]
属性或通过这个流畅的API代码来完成:
this.Ignore(i => i.Id);
你完成了,不需要调用Map
方法。