Ignoring a class property in Entity Framework 4.1 Code First
Solution 1
You can use the NotMapped
attribute data annotation to instruct Code-First to exclude a particular property
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]
attribute is included in the System.ComponentModel.DataAnnotations
namespace.
You can alternatively do this with Fluent API
overriding OnModelCreating
function in your DBContext
class:
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
The version I checked is EF 4.3
, which is the latest stable version available when you use NuGet.
Edit : SEP 2017
Asp.NET Core(2.0)
Data annotation
If you are using asp.net core (2.0 at the time of this writing), The [NotMapped]
attribute can be used on the property level.
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; }
}
Solution 2
As of EF 5.0, you need to include the System.ComponentModel.DataAnnotations.Schema
namespace.
Raheel Khan
Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it. - Brian Kernighan
Updated on October 01, 2020Comments
-
Raheel Khan over 3 years
My understanding is that the
[NotMapped]
attribute is not available until EF 5 which is currently in CTP so we cannot use it in production.How can I mark properties in EF 4.1 to be ignored?
UPDATE: I noticed something else strange. I got the
[NotMapped]
attribute to work but for some reason, EF 4.1 still creates a column named Disposed in the database even though thepublic bool Disposed { get; private set; }
is marked with[NotMapped]
. The class implementsIDisposeable
of course but I don't see how that should matter. Any thoughts?