C#",EF:某些类的Fluent-Ignore接口方法

时间:2015-11-06 00:15:42

标签: c# entity-framework datamodel

所以我有我的模型,其中一个叫做BaseBird。 BaseBird是我的其他模型中包含的模型;土耳其,鸡肉,鸵鸟。因此,我创建了一个名为IBaseBird的接口,并将其委托给BaseBird属性。

    public class Turkey: IBaseBird 
    {
       public virtual BaseBird BaseBird { get; set; }

    public string BeakType
    {
        get { return BaseBird.BeakType; }
        set { BaseBird.BeakType = value; }
    }

不幸的是,这会产生副作用,当我创建迁移时,它会在模型​​上创建所有BaseBird列。我已经看过并试图实现各种忽略列的方法,例如

   foreach (var property in typeof (IBaseBird).GetProperties())
   {
      modelBuilder.Types().Configure(m =>  m.Ignore(); );

但这忽略了我整个数据模型的列,包括我的BaseBird模型。

然后我试图将其变成模型构建器,但我似乎找不到一种方法来动态引用属性,只有它的名字。

        foreach (var property in typeof (IBaseBird).GetProperties())
        {
            modelBuilder.Entity<Turkey>().Ignore(t => t.property.Name);
        }

但这只会引发错误,因为我还无法弄清楚如何动态访问属性。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

好的,所以我找到了一个类似的解决方案。解决方案是创建一个名为BaseBird的抽象类,它是一个名为SimpleBird的类的简单副本。然后,我将所有我希望我的子类的方法放在一个名为IBaseBird的接口上,BaseBird当然会实现它。

接下来的步骤是确保子类扩展BaseBird。现在,使用[Ignore]注释BaseBird的所有属性。

通过这样做,我可以保留我的委托行为,同时仍在我的域中使用界面。