C#”;,EF:某些类上的Fluent Ignore Interface方法

本文关键字:Fluent Ignore 方法 Interface EF | 更新日期: 2023-09-27 18:20:41

所以我有我的模型,其中一个叫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模型。

然后我试着把它硬塞进modelBuilder中,但我似乎找不到一种只通过名称来动态引用属性的方法。

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

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

非常感谢在这方面的任何帮助。

C#”;,EF:某些类上的Fluent Ignore Interface方法

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

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

通过这样做,我可以保持我的委派行为,同时仍然在整个域中使用接口。