Как отобразить свойства в EF CTP5 - PullRequest
2 голосов
/ 12 декабря 2010

В 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?

Я пытался использовать следующую конфигурацию карты, но этоне работает, так как я все еще должен явно игнорировать (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 ]

6 голосов
/ 12 декабря 2010

В этом сообщении есть примеры сопоставления 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");
1 голос
/ 12 декабря 2010

CTP5 действительно более мощный и гибкий как в аннотациях данных, так и в свободном API. Например, в CTP4, если мы хотим исключить свойство из сопоставления, мы должны явно отобразить все остальное с MapSingleType , чтобы пропустить то, что нам не нужно, например, как ты упомянул.
В CTP5 это можно сделать просто с помощью атрибута [NotMapped] в свойстве или с помощью этого свободного кода API:

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

И все готово, не нужно вызывать Map метод.

...