如何在EF CTP5中映射属性

时间:2010-12-12 10:57:38

标签: entity-framework-4 entity-framework-ctp5

在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应该更流畅,但我必须编写更多代码才能实现同样的功能。

由于 本

2 个答案:

答案 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方法。