我可以为Entity Framework模型创建“中继”或“通用”属性吗?

时间:2011-01-09 05:03:13

标签: c# asp.net-mvc entity-framework

我希望我的措辞有道理......我不太确定如何解释我想要做的事情。

我在泛型类中有一个方法,它返回一个实体列表,如下所示:

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'。仅支持初始值设定项,实体成员和实体导航属性。

有没有办法可以实现我想要的结果而不将对象集拉入内存或重命名实体本身的所有属性?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您愿意将字段名称传递给List方法并构建自己的查询,则可以使用此StackOverflow文章中描述的技术来执行此操作:

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