EF 4.2忽略代码中的单个属性,首先映射到复杂类型

Raz*_*yed 2 frameworks entity entity-framework code-first

我正在尝试实现一个相对简单的概念,但看起来EF代码首先没有一个简单的方法来做到这一点.基本上我有一个地址类,它也有一个County属性.我正在映射到现有表.在某些情况下,该表有一个用于县的字段,而在其他情况下则没有.所以我只是试图忽略不适用的郡.

Fluent API允许映射到Complex Type的属性:

.Property(Function(c) c.HomeAddress.County).HasColumnName("COUNTY") 
Run Code Online (Sandbox Code Playgroud)

那很棒.但显然它不允许你忽略它:

.Ignore(Function(c) c.HomeAddress.County)
Run Code Online (Sandbox Code Playgroud)

抛出错误:

表达式'p => p.Address.County'不是有效的属性表达式.表达式应该表示一个属性:C#:'t => t.MyProperty'VB.Net:'Punction(t)t.MyProperty'.

这应该在Fluent API中允许,并且应该像上面的语句一样简单.

所以按照惯例,Code首先认为它是一个属性,你得到错误:

"无效的列名'Address_County'.

这太烂了!所以我基本上坚持这个属性.我怎么忽略它?有任何想法吗?

我不想删除该属性,我无法将其添加到表中.我尝试添加注释,代码可以工作,但是在我需要它的情况下我无法映射它.

我希望有一个简单的解决方案,或者至少是一个适当的解决方案.

Sea*_*n M 6

您可以忽略6.1.1中的复杂类型属性(不知道它何时开始获得支持)

public class MyDbContext
        : DbContext
{
//...
   protected override void OnModelCreating(DbModelBuilder modelBuilder)
   {
      modelBuilder
         .ComplexType<[complex-type-class]>()
         .Ignore(x => x.[member-to-ignore]);

}
//...
}
Run Code Online (Sandbox Code Playgroud)