繁体   English   中英

我可以为实体框架模型创建“中继”或“通用”属性吗?

[英]Can I create “relay” or “genericized” properties for Entity Framework models?

我希望我的措辞是有道理的。。。我不确定如何解释我要做什么。

我有一个通用类中的方法,该方法返回实体列表,如下所示:

public abstract class ChildCRUDController<TModel> : CRUDController<TModel, ... >
    where TModel : IChildEntity

public ViewResult List(int id)
{
    return View(repository.GetMany(x => x.ParentID == id));
}

该控制器由许多其他控制器实现。 我的问题是,并非所有实现IChildEntity的实体都具有相同的父类型。 为了解决这个问题,我为实现IChildEntity的所有模型创建了ParentID属性,以便它们可以使用同一控制器。

public partial class PhoneNumber : IChildEntity
{
    public int ParentID
    {
        get { return CustomerID; }
        set { CustomerID = ParentID; }
    }
}

和...

public partial class Transaction : IChildEntity
{
    public int ParentID
    {
        get { return LeaseID; }
        set { LeaseID= ParentID; }
    }
}

但是当我调用上面的List方法时,出现以下错误:

LINQ to Entities不支持指定的类型成员'ParentID'。 仅支持初始化程序,实体成员和实体导航属性。

有什么方法可以在不将对象集拉入内存或重命名实体本身的所有属性的情况下实现所需的结果?

谢谢!

如果您愿意将字段名称传递给List方法并构造自己的查询,则可以使用此StackOverflow文章中介绍的技术来做到这一点:

或者,您可以为ChildCRUDController提供另一个通用类型参数,该参数限制在提供字段名称的接口上,并再次动态使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM