web-dev-qa-db-ja.com

プロパティEF4コードを最初に永続化しないのですか?

Codefirst EF4を使用して非永続プロパティを作成するにはどうすればよいですか?

MSはStoreIgnore属性があると言っていますが、見つかりません。

http://blogs.msdn.com/b/efdesign/archive/2010/03/30/data-annotations-in-the-entity-framework-and-code-first.aspx

EntityConfigurationを使用してこれを設定する方法はありますか?

49
Adam Bell

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; }
62
Matt Frear

現在、私はそれを行う2つの方法を知っています。

  1. プロパティに「動的」キーワードを追加すると、マッパーによる永続化が停止します。

    private Gender gender;
    public dynamic Gender
    {
        get { return gender; }
        set { gender = value; }
    }
    
  2. 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();
4
Rob Kent

これがまだ利用可能かどうかはわかりません。

この MSDNページ Ignore AttributeとAPIが説明されていますが、以下のコメントでは、誰かが2010年6月4日に書いています:

次のCode Firstリリースではプロパティを無視できるようになります。

1
Henk Holterman

アノテーションを使用したくない場合は、 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);
    }
}
1
Marcos Dimitrio

System.ComponentModel.DataAnnotations .Schemaを使用してモデルクラスに追加します。 (「SCHEMA」を含める必要があります)

[NotMapped]データアノテーションを永続化しないようにしたいフィールドに追加します(データベースに保存しない)。

これにより、データベース内のテーブルに列として追加されなくなります。

注意してください-以前の回答にはこれらのビットが含まれている可能性がありますが、完全な「using」句がありませんでした。それらは単に「スキーマ」を省略しただけで、その下にNotMapped属性が定義されています。

0
wopanese