我正在使用 EF Core v9.0.3 和 WPF。如何让实体检测其数据何时从数据库加载?
List<>
当它从数据库接收数据时,我想从分隔的字符串属性填充实体上未映射的代理。
构造函数太早,PropertyChanged
当数据从数据库加载到属性中时不会触发。
当代理列表绑定到 UI 时,字符串属性尚未填充,因此我无法在其获取中创建列表。
PopulateFKLookupsUI()
下面的例子。显然,一旦数据上下文创建了实体,我就可以从视图模型中调用,但我希望实体能够处理它。
public class PretendEntityWithProxyCollection : FwObservableObject
{
public PretendEntityWithProxyCollection()
{
FKLookupsUI.CollectionChanged += FKLookupsUI_CollectionChanged;
FKLookupsUI.ItemPropertyChanged += FKLookupsUI_ItemPropertyChanged;
}
private string? _fKLookups;
[Browsable(false)]
public string? FKLookups
{
get { return _fKLookups; }
set { CheckPropertyChanged(ref _fKLookups, value); }
}
[NotMapped]
public FwObservableItemCollection<FKLookup> FKLookupsUI { get; set; } = [];
#region Private Methods
private void FKLookupsUI_ItemPropertyChanged(object? sender, PropertyChangedEventArgs e)
{
UpdateFKLookups();
}
private void FKLookupsUI_CollectionChanged(object? sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
UpdateFKLookups();
}
private void UpdateFKLookups()
{
if (!populating)
{
List<string> fkLookupsArray = [];
foreach (var item in FKLookupsUI.Where(x => x.Deleted == false))
{
fkLookupsArray.Add(item.ToString());
}
FKLookups = string.Join(":", fkLookupsArray);
}
}
private bool populating;
public void PopulateFKLookupsUI()
{
populating = true;
foreach (var item in FKLookups.Split(':', StringSplitOptions.RemoveEmptyEntries))
{
FKLookupsUI.Add(new FKLookup() { ForeignKey = item });
}
populating = false;
}
#endregion //Private Methods
}