如何不先保留属性EF4代码?

时间:2010-08-29 15:45:00

标签: c# .net entity-framework entity-framework-4 ef4-code-only

如何使用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设置它?

5 个答案:

答案 0 :(得分:62)

在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; }

答案 1 :(得分:4)

目前,我知道有两种方法可以做到。

  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, ... });
    }         
    
  3. 使用方法2,如果EF团队引入了Ignore,您将能够轻松地将代码更改为:

         modelBuilder.Entity<Person>().Property(p => p.IgnoreThis).Ignore();
    

答案 2 :(得分:1)

我不确定这是否可用。

在此MSDN page上描述了忽略属性和API,但在下面的评论中,有人在2010年6月4日写道:

  

您将能够忽略下一个Code First版本中的属性

答案 3 :(得分:1)

如果您不想使用注释,可以使用Fluent API。覆盖OnModelCreating并使用DbModelBuilder的Ignore()方法。假设你有一个'Song'实体:

public class MyContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Song>().Ignore(p => p.PropToIgnore);
    }
}

您还可以将EntityTypeConfiguration用于move configurations to separate classes以获得更好的可管理性:

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);
    }
}

答案 4 :(得分:0)

添加 使用System.ComponentModel.DataAnnotations。架构 到模型类。 (必须包括&#34; SCHEMA&#34;)

将[NotMapped]数据注释添加到要保留的字段中(即不保存到数据库中)。

这将阻止它们作为列添加到db中的表中。

请注意 - 以前的答案可能包含这些位,但它们没有完整的&#34;使用&#34;条款。他们只是停止了&#34;架构&#34; - 定义NotMapped属性。