繁体   English   中英

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

[英]How not persist property EF4 code first?

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

在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. 将“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();

如果您不想使用注释,则可以使用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);
    }
}

我不确定这是否可用。

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

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

使用System.ComponentModel.DataAnnotations添加。 架构到模型类。 (必须包括“SCHEMA”)

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

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

请注意 - 之前的答案可能包含这些位,但它们没有完整的“使用”子句。 它们只是停止了“模式” - 在其下定义了NotMapped属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM