如何在EF CTP5中映射属性

Ben*_*ter 2 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
});
Run Code Online (Sandbox Code Playgroud)

我们如何在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");
});
Run Code Online (Sandbox Code Playgroud)

考虑到新的API应该更流畅,我必须编写更多代码才能实现同样的功能.

谢谢Ben

B Z*_*B Z 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();
Run Code Online (Sandbox Code Playgroud)

更改字符串长度:

modelBuilder.Entity<Product>() 
    .Property(p => p.Name) 
    .HasMaxLength(50);
Run Code Online (Sandbox Code Playgroud)

关闭身份:

modelBuilder.Entity<Product>() 
    .Property(p => p.ProductId) 
    .HasDatabaseGenerationOption(DatabaseGenerationOption.None);
Run Code Online (Sandbox Code Playgroud)

忽略一个属性:

modelBuilder.Entity<Person>() 
    .Ignore(p => p.Name); 
Run Code Online (Sandbox Code Playgroud)

表和列映射更改列名:

modelBuilder.Entity<Category>() 
    .Property(c => c.Name) 
    .HasColumnName("cat_name");
Run Code Online (Sandbox Code Playgroud)

更改表名称:

modelBuilder.Entity<Category>() 
    .ToTable("MyCategories");
Run Code Online (Sandbox Code Playgroud)

使用架构更改表名:

modelBuilder.Entity<Category>() 
    .ToTable("MyCategories", "sales");
Run Code Online (Sandbox Code Playgroud)