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

在 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; }
于 2011-01-01T16:46:49.547 回答
4

目前,我知道两种方法。

  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 团队引入 Ignore,您将能够轻松将代码更改为:

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

如果你不想使用 Annotations,你可以使用Fluent API。覆盖OnModelCreating并使用 DbModelBuilder 的Ignore()方法。假设您有一个“歌曲”实体:

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 回答
0

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

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

这将防止它们作为列添加到数据库中的表中。

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

于 2015-10-07T19:00:49.597 回答