如何使用PCL排除EF中的属性?

时间:2014-09-29 19:23:35

标签: entity-framework-5 portable-class-library

我已经定义了POCO,如下所示:

public class Customer
{
    public string Name { get; set; }
    public DateTime DOB { get; set; }
    [System.ComponentModel.DataAnnotations.Schema.NotMapped] // <- this is what I want to do, but can't in PCL
    public AccountCollection Accounts { get; set; }
}

上面有“NotMapped”属性,这就是我想要的 - 但它在便携式类库(PCL)中不可用。问题是,我需要的类是在将在便携式设备上使用的程序集中定义的,但它将从Web上的实体框架填充,该框架可以访问NotMapped属性。如果我能找到一种方法将属性添加到EF的“NotMapped”列表中,那将是理想的。

有没有办法让它发挥作用?也就是说,以编程方式执行“NotMapped”操作的方法是什么?

我考虑过其他解决方法,但没有一个是理想的:

  • 可以创建与我的域图层分开的DAL并进行翻译 在两者之间(但需要映射和两个模型而不是一个)
  • 可以编写自定义EF查询和更新来忽略该属性(但意味着自己编写所有linq / SQL / proc)

1 个答案:

答案 0 :(得分:1)

在Context的OnModelCreating()重载中找到答案。访问modelBuilder参数,可以找到实体并忽略特定属性。即使在PCL中定义POCO,这也有效。

例如:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
        // Ignore Customer.Accounts
        modelBuilder.Entity<Customer>().Ignore(c => c.Accounts); 
}