簡體   English   中英

如何在Entity Framework中禁用插入?

[英]How to disable insert in Entity Framework?

有沒有辦法禁止在實體框架中插入實體?

我正在使用DDD,並且在特定的有界上下文中,users表的一些必需數據庫字段沒有意義(在此上下文中)。 所以,我想從User實體中刪除它們,但是這樣做我失去了將用戶保存到數據庫的能力。 哪個是好的,因為在這種情況下,我不應該創建用戶。

我的第一個想法是禁用用戶實體上的插入(但允許更新)。

這可行嗎? 或者,這種情況還有另一種解決方案嗎?

您無法禁用插入,但在這種情況下,您可以找到是否標記了插入和觸發異常的任何實體。

執行此類處理的最佳位置是覆蓋SaveChanges方法:

public override int SaveChanges(SaveOptions options)
{
    if (ObjectStateManager.GetObjectStateEntries(EntityState.Added)
                          .Where(e => !e.IsRelationship)
                          .Select(e => e.Entity)
                          .OfType<User>()
                          .Any())
    {
        throw new InvalidOperationException("User cannot be inserted");
    }

    return base.SaveChanges(options);
}

這是運行時行為,但由於EF在修改操作之間沒有差異(所有都在單個SaveChanges ),因此無法在編譯時檢測插入。

暫無
暫無

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

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