首页 文章

忽略Entity Framework 4.1 Code First中的类属性

提问于
浏览
269

我的理解是,在目前使用CTP的EF 5之前, [NotMapped] 属性不可用,因此我们无法在 生产环境 中使用它 .

如何将EF 4.1中的属性标记为忽略?

UPDATE: 我注意到其他一些奇怪的东西 . 我得到了 [NotMapped] 属性,但由于某种原因,即使 public bool Disposed { get; private set; } 标记为 [NotMapped] ,EF 4.1仍会在数据库中创建一个名为Disposed的列 . 该类实现了 IDisposeable 当然,但我不知道这应该如何重要 . 有什么想法吗?

2 回答

  • 34

    从EF 5.0开始,您需要包含 System.ComponentModel.DataAnnotations.Schema 命名空间 .

  • 531

    您可以使用 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 名称空间中 .

    您也可以使用 DBContext 类中的 Fluent API 覆盖 OnModelCreating 函数执行此操作:

    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时可用的最新稳定版本 .


    Edit :2017年9月

    Asp.NET核心(2.0)

    Data annotation

    如果您使用的是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; }
    }
    

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

相关问题