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

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

как я могу отметить свойства в EF 4.1, которые нужно игнорировать?

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

2 ответов


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

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 переопределение в своем 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=против 103).aspx

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


редактировать : сентябрь 2017

Asp.NET Core (2.0)

аннотации

если вы используете asp.net core (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; }
}

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