1. ホーム
  2. c#

[解決済み】Entity Framework 4.1 Code Firstでクラスプロパティを無視する

2022-03-26 20:51:42

質問

私の理解では [NotMapped] 属性は、現在CTP中のEF 5まで使用できないため、実運用で使用することはできません。

EF 4.1 のプロパティを無視するようにマークするにはどうすればよいですか?

UPDATEしてください。 また変なことに気がつきました。私は [NotMapped] 属性は動作しますが、なぜかEF 4.1では public bool Disposed { get; private set; } でマークされています。 [NotMapped] . このクラスは IDisposeable もちろん、それは重要ではありませんが、私はそれがどのように重要であるべきかを見ていない。何かご意見はありますか?

解決方法は?

を使用することができます。 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; }
}