50

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 を使用してこれを設定する方法はありますか?

4

5 に答える 5

64

[NotMapped]EF Code-First CTP5 では、アノテーションを使用できます。

using System.ComponentModel.DataAnnotations;
public class Song
{
    public int Id { get; set; }
    public string Title { get; set; }

    [NotMapped]
    public int Track { get; set; }
于 2011-01-01T16:46:49.547 に答える
4

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

  1. 'dynamic' キーワードをプロパティに追加すると、マッパーはプロパティを保持しなくなります。

    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 チームが Ignore を導入した場合、コードを次のように簡単に変更できます。

     modelBuilder.Entity<Person>().Property(p => p.IgnoreThis).Ignore();
于 2010-10-30T13:17:46.527 に答える
2

注釈を使用したくない場合は、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);
    }
}
于 2015-09-02T18:15:46.977 に答える
1

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

このMSDN ページでは、無視する属性と API について説明されていますが、以下のコメントでは、誰かが 2010 年 6 月 4 日に次のように書いています。

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

于 2010-08-29T15:56:36.783 に答える