Игнорирование свойства класса в Entity Framework 4.1 Сначала код

Я понимаю, что атрибут [NotMapped] недоступен до EF 5, который в настоящее время находится в CTP, поэтому мы не можем использовать его в процессе производства.

Как я могу пометить свойства в EF 4.1 для игнорирования?

ОБНОВЛЕНИЕ: Я заметил что-то еще странное. Я получил атрибут [NotMapped], но по какой-то причине EF 4.1 по-прежнему создает столбец с именем Disposed в базе данных, хотя public bool Disposed { get; private set; } отмечен [NotMapped]. Конечно, класс реализует IDisposeable, но я не вижу, как это важно. Любые мысли?

Ответ 1

Вы можете использовать аннотацию данных атрибута NotMapped, чтобы дать команду Code-First исключить конкретное свойство

public class Customer
{
    public int CustomerID { set; get; }
    public string FirstName { set; get; } 
    public string LastName{ set; get; } 
    [NotMapped]
    public int Age { set; get; }
}

[NotMapped] атрибут включен в пространство имен System.ComponentModel.DataAnnotations.

В качестве альтернативы вы можете сделать это с Fluent API переопределением OnModelCreating функции в классе DBContext:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
   modelBuilder.Entity<Customer>().Ignore(t => t.LastName);
   base.OnModelCreating(modelBuilder);
}

http://msdn.microsoft.com/en-us/library/hh295847(v=vs.103).aspx

Проверяемая версия - EF 4.3, которая является последней стабильной версией, доступной при использовании NuGet.


Изменить: SEP 2017

Asp.NET Core (2.0)

Аннотации данных

Если вы используете ядро ​​asp.net(2.0 на момент написания этой статьи), атрибут [NotMapped] можно использовать на уровне свойства.

public class Customer
{
    public int Id { set; get; }
    public string FirstName { set; get; } 
    public string LastName { set; get; } 
    [NotMapped]
    public int FullName { set; get; }
}

Свободный API

public class SchoolContext : DbContext
{
    public SchoolContext(DbContextOptions<SchoolContext> options) : base(options)
    {
    }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Customer>().Ignore(t => t.FullName);
        base.OnModelCreating(modelBuilder);
    }
    public DbSet<Customer> Customers { get; set; }
}

Ответ 2

Как и EF 5.0, вам нужно включить пространство имен System.ComponentModel.DataAnnotations.Schema.