2

在 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 应该更流畅,奇怪的是我必须编写更多的代码来实现同样的事情。

谢谢本

4

2 回答 2

5

这篇博文有 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); 

表和列映射更改列名:

modelBuilder.Entity<Category>() 
    .Property(c => c.Name) 
    .HasColumnName("cat_name");

更改表名:

modelBuilder.Entity<Category>() 
    .ToTable("MyCategories");

使用模式更改表名:

modelBuilder.Entity<Category>() 
    .ToTable("MyCategories", "sales");
于 2010-12-12T16:21:31.163 回答
1

CTP5 在 Data Annotations 和 Fluent API 方面确实更加强大和灵活。例如,在 CTP4 中,如果我们想从映射中排除一个属性,我们必须使用MapSingleType显式映射其他所有内容,以便跳过我们不想要的那个,就像你提到的那样。 在 CTP5 中,这可以简单地通过使用属性上的属性或通过以下流畅的 API 代码来完成:
[NotMapped]

this.Ignore(i => i.Id);

你就完成了,不需要调用Map方法。

于 2010-12-12T12:55:26.237 回答