gpt4 book ai didi

c# - 在 Entity Framework 5 返回的 POCO 中激活 INotifyPropertyChanged 的​​推荐做法

转载 作者:行者123 更新时间:2023-11-30 16:19:01 29 4
gpt4 key购买 nike

我有一些 POCO 继承自实现 INotifyPropertyChanged 的​​通用业务基类。我也在 DAL 使用 EF5。如果我要像下面这样获取单个竞争对手对象:

public ICompetitorCard Fetch(long id)
{
return this.Fetch<ContactCardContext, ICompetitorCard>(
() => { return ContactCardContext.GetInstance(this); },
ctx =>
{
var query = from competitor in ctx.Competitors
where competitor.Id == id
select competitor;

return query.SingleOrDefault();
}, "ICompetitorCard Fetch(long id) failed");
}

我取回了由 EF5 完美填充的 CompetitorCard 对象。问题是我不想在从 DAL 加载时触发通知。所以通常我可能会设置某种字段来跟踪对象是否已初始化。这很容易“正常”实现,但由于在这种情况下 EF 正在执行加载,我想知道我需要挂接什么事件/虚拟方法才能设置

IsInitialised = true;

以便此后触发属性通知。我想我可以做类似的事情:

ICompetitorCard card = query.SingleOrDefault();
if (card!=null){card.IsInitialised = true;}
return card;

但这似乎过于冗长,破坏了封装并且对集合等来说是一种痛苦。那么对于那些处理自己的 INotifyPropertyChanged 实现的人来说,他们如何使用 EF5 来管理它?

最佳答案

您通过订阅对象内的事件来“激活”INotifyPropertyChanged,并且在实例化对象之前无法完成此操作。

在您的对象中,除非有订阅者,否则您不会引发更改事件。

参见 MSDN了解更多信息。


更新:

您可以订阅 ObjectContextObjectMaterialized 事件以将您的对象标记为已加载。像这样:

((IObjectContextAdapter)this).ObjectContext.ObjectMaterialized += 
this.ObjectContext_OnObjectMaterialized;

实现你的功能

ObjectContext_OnObjectMaterialized(object sender, ObjectMaterializedEventArgs e).

EventArgs 将为您提供刚刚实现的对象。

关于c# - 在 Entity Framework 5 返回的 POCO 中激活 INotifyPropertyChanged 的​​推荐做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15566469/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com