问题描述
我以一种非常规的方式使用Entity Framework来跟踪Winforms应用程序中的更改。基本上,我通过API调用加载数据,并将数据附加到上下文中以显示在网格控件中。
我有一些要求在网格列(很多这样的列)中显示基于一对一关系的导航属性。为了实现这一点,需要跟踪部分。附加实体后,我将使用Local Data概念。
这是问题的简化示例
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public int DepartmentId { get; set; }
public Department Department { get; set; }
}
public class Department
{
public int Id { get; set; }
public string Name { get; set; }
}
// Loading & Attaching records into the context
using (MyContext context = new MyContext())
{
// Get list of Students with Department data from API
var students = GetStudents();
foreach (var record in students )
{
var existingEntry = Set<T>().Local.FirstOrDefault(d => d.Id== record.Id);
if (existingEntry != null)
{
this.Entry(existingEntry).CurrentValues.SetValues(record);
this.Entry(existingEntry).State = EntityState.Unchanged;
}
else
{
// Throws exception because some students belong to same department and that department is already attached
Set<T>().Attach(record);
}
}
}
我了解检查存在性仅适用于学生级别,但是部门数据仍然会出现问题。在实际的实现中,我具有很多导航属性(每个实体平均15个),包括集合。另外,API检索和附加上下文是一个通用实现(代替GetStudents()
方法,我用一些API路由调用了一些其他方法,这些方法基于一些OData查询来检索数据列表)。
除了在附加之前使用反射检查每个记录的所有导航属性的存在之外,什么是合适的方法?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)