假设我有一个名为Foo的实体框架实体,而在Foo中有一个名为Bar的属性。
在Bar的setter中有没有办法进入实体框架上下文?
public partial class Foo : IObjectWithChangeTracker
{
public string Bar
{
get { /* ... */ }
set
{
// How do I get the entity context here?
}
}
}
答案 0 :(得分:1)
如果我正确理解了您的问题,我这样做的方法是向Bar
添加不在数据协定下的属性,然后编写另一个方法来检索另一个对象并在那里设置Bars
属性。但是,由于HighCore说的原因,我可能不理解你的问题。整个想法对我来说没有意义;对象不拥有上下文。
if (context.OtherObjectTable != null)
{
var otherObj = (from obj
in context.OtherObjectTable
where obj.Name == "Name/key for obj"
select obj).FirstOrDefault(); // ensures we only get one back
如果您按主键搜索,则只需删除FirstOrDefault()
即可。如果您可以返回多个结果,则创建另一个循环,您可以迭代otherObj
(现在可能是列表)并过滤下一个标识属性。在该循环之后,您可以像
Bar.Count = (int)otherObj.SomeInt32;
答案 1 :(得分:1)
听起来不错。我不知道你的应用程序是如何构建的,但是在客户端(应该引用模型,你不应该引用数据访问层(位于服务器中),也不应该引用System.Data。所以你不能在引用EF上下文的地方添加代码,而不会破坏整个应用程序结构。
我建议在实体中添加某种静态委托,例如Action<Foo> OnBarChanged
并在setter中调用,然后在服务器端,在某些初始化代码中,将静态委托设置为某些代码您实际上可以访问所需的一切。