0
我有一個與其他實體具有1:n或n:m關係的實體,但不必在需要時對數據庫執行.Count()調用/查詢,我在想是否有任何EF(6)內置方法來反規範化和寫這些經常(在我的情況下)訪問計數數字到一個屬性/列一旦添加/刪除這樣的關係?實體框架中的非規範化關係計數
有沒有什麼辦法掛鉤到DbContext的DbSet.Add()/ .Remove()機制來做到這一點或任何其他,也許更優雅的方式?
我有一個與其他實體具有1:n或n:m關係的實體,但不必在需要時對數據庫執行.Count()調用/查詢,我在想是否有任何EF(6)內置方法來反規範化和寫這些經常(在我的情況下)訪問計數數字到一個屬性/列一旦添加/刪除這樣的關係?實體框架中的非規範化關係計數
有沒有什麼辦法掛鉤到DbContext的DbSet.Add()/ .Remove()機制來做到這一點或任何其他,也許更優雅的方式?
EF中沒有內置的方法。
我的建議是創建一個計算列,計算DB中的關係數。這將負責數據的數據檢索,而無需在保存更改之前對集合執行客戶端操作時不必急於/延遲加載收集,而是不更新計數。爲了跟蹤客戶端的變化,我建議實施collection nav屬性作爲ObservableCollection<T>
。處理CollectionChanged
事件以相應地更新POCO的RelationshipCount
屬性。
POCO的屬性和方法:
create function dbo.udfGetRelationshipCount(@id int)
returns int
as
declare @count int
select @count = count(*)
from
dbo.RelatedEntity
where
EntityId = @id
return @count
添加列:
public virtual ObservableCollection<RelatedEntity> RelatedEntities { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public int RelationshipCount { get; set; }
void RelatedEntities_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
var col = sender as ReadOnlyObservableCollection<RelatedEntity>;
RelatedEntities = col.Count();
}
在你的數據庫來計算的計數值創建UDF
alter table dbo.Entity
ADD RelationshipCount as dbo.udfGetRelationshipCount(EntityId)
噢,那是不錯的確,謝謝! –