簡體   English   中英

EF核心:將參考對象設為只讀,但仍不可理解

[英]EF Core: Make reference object readonly but still includable

我有以下課程:

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public int BlogId { get; set; }
    public Blog Blog { get; set; }
}

我想使引用導航屬性為只讀,以確保從屬實體不能通過主體實體進行更改。

我這樣嘗試過:

public Blog Blog { get; }

但是,當它嘗試執行Include時,出現以下錯誤: “傳遞給Include運算符的表達式'[post] .Blog'無法綁定。”

如何使參考導航屬性為只讀但仍不可理解?

如果模型類與EF上下文位於同一程序集和名稱空間中,而其他用法則不同,則可以嘗試將Blog的setter internal設置為,這將允許EF對其進行設置,但可以防止其他地方的嘗試。 您可能還需要調整項目的AssemblyInfo文件,以使內部對EntityFramework DLL和名稱空間可見,因為實際進行設置的代碼就在那里。

請記住,雖然這將防止其他編碼者將Blog設置為Blog類型的新實例,但是現有實例仍將是可變的,因此編碼者/用戶可以更新數據成員而無需更改存儲在Post的引用。 您可以通過類似於Post上的Blog屬性將其內部化來鎖定Blog中的設置器,但是您開始打開一罐蠕蟲,其中涉及如何對Blog進行有意更改。 如果除DAL之外的所有Blog始終都是只讀的,那么更改Blog的唯一方法是在DAL中公開一個方法,該方法采用Blog的某些可變變體(例如BlogDto),並將指定的參數復制到Blog中賓語。 如果那是您想要的,那很好,但不管您是否知道,可能不是。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM