Codefirst EF4を使用して非永続プロパティを作成するにはどうすればよいですか?
MSはStoreIgnore属性があると言っていますが、見つかりません。
EntityConfigurationを使用してこれを設定する方法はありますか?
EF Code-First CTP5では、[NotMapped]
アノテーション。
using System.ComponentModel.DataAnnotations;
public class Song
{
public int Id { get; set; }
public string Title { get; set; }
[NotMapped]
public int Track { get; set; }
現在、私はそれを行う2つの方法を知っています。
プロパティに「動的」キーワードを追加すると、マッパーによる永続化が停止します。
private Gender gender;
public dynamic Gender
{
get { return gender; }
set { gender = value; }
}
DBContextでOnModelCreatingをオーバーライドし、型全体を再マップします。永続化したくないプロパティは省略します。
protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Person>().MapSingleType(p => new { p.FirstName, ... });
}
方法2を使用すると、EFチームが無視を導入した場合、コードを次のように簡単に変更できます。
modelBuilder.Entity<Person>().Property(p => p.IgnoreThis).Ignore();
これがまだ利用可能かどうかはわかりません。
この MSDNページ Ignore AttributeとAPIが説明されていますが、以下のコメントでは、誰かが2010年6月4日に書いています:
次のCode Firstリリースではプロパティを無視できるようになります。
アノテーションを使用したくない場合は、 Fluent API を使用できます。 OnModelCreating
をオーバーライドし、DbModelBuilderの Ignore()
メソッドを使用します。 「Song」エンティティがあるとします。
public class MyContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Song>().Ignore(p => p.PropToIgnore);
}
}
EntityTypeConfigurationを使用して、構成を クラスに移動して 管理性を向上させることもできます。
public class MyContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new SongConfiguration());
}
}
public class SongConfiguration : EntityTypeConfiguration<Song>
{
public SongConfiguration()
{
Ignore(p => p.PropToIgnore);
}
}
System.ComponentModel.DataAnnotations .Schemaを使用してモデルクラスに追加します。 (「SCHEMA」を含める必要があります)
[NotMapped]データアノテーションを永続化しないようにしたいフィールドに追加します(データベースに保存しない)。
これにより、データベース内のテーブルに列として追加されなくなります。
注意してください-以前の回答にはこれらのビットが含まれている可能性がありますが、完全な「using」句がありませんでした。それらは単に「スキーマ」を省略しただけで、その下にNotMapped属性が定義されています。