Как не сохранить свойство EF4 кода первым? - PullRequest
49 голосов
/ 29 августа 2010

Как сделать непостоянные свойства, используя codefirst EF4?

MS говорит, что есть атрибут StoreIgnore, но я не могу его найти.

http://blogs.msdn.com/b/efdesign/archive/2010/03/30/data-annotations-in-the-entity-framework-and-code-first.aspx

Есть ли способ настроить это с помощью EntityConfiguration?

Ответы [ 5 ]

62 голосов
/ 01 января 2011

В ETP Code-First CTP5 вы можете использовать аннотацию [NotMapped].

using System.ComponentModel.DataAnnotations;
public class Song
{
    public int Id { get; set; }
    public string Title { get; set; }

    [NotMapped]
    public int Track { get; set; }
4 голосов
/ 30 октября 2010

В настоящее время мне известны два способа сделать это.

  1. Добавить ключевое слово «dynamic» в свойство, чтобы прекратить его сохранение в маппере:

    private Gender gender;
    public dynamic Gender
    {
        get { return gender; }
        set { gender = value; }
    }
    
  2. Переопределить OnModelCreating в DBContext и переназначить весь тип, пропустив свойства, которые вы не хотите сохранять:

    protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<Person>().MapSingleType(p => new { p.FirstName, ... });
    }         
    

Используя метод 2, если методКоманда EF представит Игнорировать, вы сможете легко изменить код на:

     modelBuilder.Entity<Person>().Property(p => p.IgnoreThis).Ignore();
1 голос
/ 02 сентября 2015

Если вы не хотите использовать аннотации, вы можете использовать Fluent API .Переопределите OnModelCreating и используйте метод DbModelBuilder Ignore().Предположим, у вас есть сущность «Song»:

public class MyContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Song>().Ignore(p => p.PropToIgnore);
    }
}

Вы также можете использовать EntityTypeConfiguration для перемещения конфигураций в отдельные классы для лучшей управляемости:

public class MyContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new SongConfiguration());
    }

}

public class SongConfiguration : EntityTypeConfiguration<Song>
{
    public SongConfiguration()
    {
        Ignore(p => p.PropToIgnore);
    }
}
1 голос
/ 29 августа 2010

Я не уверен, что это доступно еще.

На этой странице MSDN Атрибут и API игнорирования описаны, но ниже, в комментариях, кто-то пишет 4 июня 2010 года:

Вы сможетеигнорировать свойства в следующем выпуске Code First,

0 голосов
/ 07 октября 2015

Добавить с помощью System.ComponentModel.DataAnnotations. Схема в классе модели.(Должно включать «SCHEMA»)

Добавить аннотацию данных [NotMapped] к полям, которые вы хотите сохранить (т.е. не сохранять в базе данных).

Это предотвратит ихот добавления в качестве столбца к таблице в БД.

Обратите внимание - предыдущие ответы могли включать эти биты, но в них не было полного предложения "использование".Они просто оставили «схему», в которой определен атрибут NotMapped.

...