Как не персистировать свойство EF4 кода первым?

Как мне сделать не сохраняемые свойства с помощью 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?

Ответ 1

В EF 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; }

Ответ 2

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

  • Добавьте ключевое слово "динамическое" в свойство, которое останавливает его:

    private Gender gender;
    public dynamic Gender
    {
        get { return gender; }
        set { gender = value; }
    }
    
  • Переопределить 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 вводит Ignore, вы сможете легко изменить код на:

     modelBuilder.Entity<Person>().Property(p => p.IgnoreThis).Ignore();

Ответ 3

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

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

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

Ответ 4

Если вы не хотите использовать аннотации, вы можете использовать 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);
    }
}

Ответ 5

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

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

Это предотвратит их добавление в качестве столбца в таблицу в db.

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