私の理解では、この[NotMapped]
属性は現在 CTP にある EF 5 までは利用できないため、運用環境では使用できません。
EF 4.1 でプロパティを無視するようにマークするにはどうすればよいですか?
更新:他にも奇妙な点があることに気付きました。属性は機能するようになりましたが、何らかの理由で、EF 4.1 はが でマークされている[NotMapped]
にもかかわらず、データベースに Disposed という名前の列を作成します。クラスは を実装しますが、それがどう問題になるのかわかりません。何かご意見はありますか?public bool Disposed { get; private set; }
[NotMapped]
IDisposeable
ベストアンサー1
NotMapped
属性データアノテーションを使用して、特定のプロパティを除外するようにコードファーストに指示することができます。
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
オーバーライドしてこれを行うこともできます。OnModelCreating
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
私が確認したバージョンは でEF 4.3
、これは NuGet を使用するときに利用できる最新の安定バージョンです。
編集: 2017年9月
Asp.NET Core(2.0)
データ注釈
asp.net core (この記事の執筆時点では 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; }
}
流暢な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; }
}