私の理解するところでは、[NotMapped]
属性は現在CTPに入っているEF 5まで利用できないので、本番では使用できません。
EF 4.1のプロパティを無視するようにマークするにはどうすればよいですか?
更新:他に何かおかしいことに気づきました。 [NotMapped]
属性を機能させることができましたが、何らかの理由で、public bool Disposed { get; private set; }
が[NotMapped]
でマークされていてもEF 4.1はデータベースにDisposedという名前の列を作成します。クラスはもちろんIDisposeable
を実装していますが、それがどのように重要であるべきかわかりません。何かご意見は?
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
namespaceに含まれています。
OnModelCreating
クラスのDBContext
関数をオーバーライドするFluent API
で代わりにこれを行うことができます。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Customer>().Ignore(t => t.LastName);
base.OnModelCreating(modelBuilder);
}
http://msdn.Microsoft.com/ja-jp/library/hh295847(v = vs103).aspx
私が確認したバージョンはEF 4.3
です。これは、NuGetを使用するときに利用できる最新の安定版です。
編集:SEP 2017
データアノテーション
あなたがasp.netコアを使っているなら(この記事を書いている時点では2.)、[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
名前空間を含める必要があります。