如何使用codefirst EF4制作非持久化属性?
MS说有一个StoreIgnore属性,但我找不到它。有没有办法使用EntityConfiguration设置它?
答案 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)
目前,我知道有两种方法可以做到。
将“dynamic”关键字添加到属性中,从而停止映射器持久保存它:
private Gender gender;
public dynamic Gender
{
get { return gender; }
set { gender = value; }
}
覆盖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();
答案 2 :(得分:1)
答案 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属性。