【问题标题】:C#", EF: Fluent-Ignore Interface methods on certain classesC#", EF:某些类上的 Fluent-Ignore 接口方法
【发布时间】:2016-02-07 00:54:14
【问题描述】:

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

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

非常感谢您对此的任何帮助。

【问题讨论】:

    标签: c# entity-framework datamodel


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多