Ignorowanie właściwości klasy w kodzie Entity Framework 4.1

Rozumiem, że atrybut [NotMapped] nie jest dostępny aż do EF 5, który jest obecnie w CTP, więc nie możemy go używać w produkcji.

Jak zaznaczyć właściwości w EF 4.1, które mają być ignorowane?

UPDATE: zauważyłem coś jeszcze dziwnego. Mam atrybut [NotMapped] do pracy, ale z jakiegoś powodu EF 4.1 nadal tworzy kolumnę o nazwie usuniętej w bazie danych, mimo że public bool Disposed { get; private set; } jest oznaczona [NotMapped]. Klasa implementuje IDisposeable oczywiście ale nie widzę jak to powinno Materia. Jakieś pomysły?

Author: SharpC, 2012-04-30

2 answers

Możesz użyć adnotacji danych atrybutu NotMapped, aby polecić Kod-najpierw wyklucz konkretną właściwość

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] atrybut jest zawarty w przestrzeni nazw System.ComponentModel.DataAnnotations.

Możesz to zrobić alternatywnie za pomocą Fluent API nadrzędnej funkcji OnModelCreating w twojej klasie 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

Sprawdzałem wersję EF 4.3, która jest najnowszą stabilną wersją dostępną przy użyciu NuGet.


Edytuj : Wrzesień 2017

Asp.NET Core (2.0)

Adnotacja danych

Jeśli używasz asp.net core (2.0 w momencie pisania) atrybut [NotMapped] może być używany na poziomie właściwości.

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

Fluent 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; }
}
 515
Author: Shyju,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-30 17:20:45

Od wersji EF 5.0, musisz dołączyć przestrzeń nazw System.ComponentModel.DataAnnotations.Schema.

 32
Author: Shane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-27 16:53:48