簡體   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