346

私の理解では、この[NotMapped]属性は現在CTPにあるEF 5まで使用できないため、本番環境では使用できません。

EF 4.1のプロパティを無視するようにマークするにはどうすればよいですか?

更新:私は何か他の奇妙なことに気づきました。属性を機能させることができまし[NotMapped]たが、何らかの理由で、EF 4.1は、public bool Disposed { get; private set; }がでマークされていても、データベースにDisposedという名前の列を作成します[NotMapped]。クラスIDisposeableはもちろん実装しますが、それがどのように重要かわかりません。何かご意見は?

4

2 に答える 2

676

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オーバーライドしてこれを行うこともできます。OnModelCreatingDBContext

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を使用したときに利用できる最新の安定バージョンです。


編集2017年9月

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

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; }
}
于 2012-04-30T14:53:56.990 に答える
37

System.ComponentModel.DataAnnotations.SchemaEF 5.0以降、名前空間を含める必要があります。

于 2013-06-27T16:53:48.313 に答える