0

到处都在问这个问题,但是CodePlex上的 SUPPOSED 解决方法不起作用。

我希望有人有一些更新的信息。

我有一个 EF5 Code First 项目,其中有几十个实体直接派生自抽象基类。在创建一些从派生自该基类的类派生的新实体后,最初创建我的数据库时,我收到以下错误:

You cannot use Ignore method on the property 'DisplayString' on type 
'Doctor' because this type inherits from the type 
'Contact' where this property is mapped. To exclude 
this property from your model, use NotMappedAttribute or Ignore 
method on the base type.

这是我的课程:

public abstract class AbsoluteBaseClass
{
  [NotMapped]
  public abstract string DisplayString { get; set; }
  ...
}

public class Contact : AbsoluteBaseClass
{
  [NotMapped]
  public override string DisplayString
  {
    get { return string.Format("{0} {1}", FirstName, LastName); }
    set { throw new System.NotImplementedException(); }
  }
  ...
}

public class Doctor : Contact
{
  ...
}

我还有其他类似的情况(从基类派生的类派生的类),我的工作正常,但是添加这些新类又破坏了。

我还尝试在 OnModelCreating 中添加 .Ignore 指令(基类之前的派生类),这也没有任何区别。

  modelBuilder.Entity<Doctor>().Ignore(p => p.DisplayString);
  modelBuilder.Entity<Contact>().Ignore(p => p.DisplayString);

我有几种情况,其中我有从 AbsoluteBaseClass 派生的实体,并且大多数时候事情都有效,但随后我会添加另一个派生类,事情会再次中断。这似乎没有押韵或理由。

我真的很感激一些关于如何在我添加类时明确地让它工作的建议。似乎提到了应用于 EF5 源的修复,然后您构建源。有没有人尝试过并让它工作?

感谢您的任何建议!科里。

4

1 回答 1

0

就我而言,在现有数据库上使用 Code First (EF6)ID时,我创建了一些基类来处理常见的属性,例如.

(注:下面是OnModelCreating(DbModelBuilder mb)方法里面的)

然后我需要完全忽略基类

mb.Ignore(new[] {
    typeof(BaseClassA),
    typeof(BaseClassB)
});

然后,有点违反直觉,我需要注册基本模型属性:

mb.Entity<BaseClassA>().HasKey(m => m.ID);
mb.Entity<BaseClassB>().Whatever...

我的派生类之一需要忽略其中一个基本属性(称为NormalNotIgnored)。我用过EntityTypeConfiguration,但我认为你可以用普通的 Fluent 做同样的事情:

mb.Entity<DerivedClassB1>().Ignore(m => m.NormallyNotIgnored);

这至少已经编译/迁移(-IgnoreChanges在迁移中,因为表已经存在)并解决了有问题的错误。

于 2014-01-02T18:36:15.097 回答