我有3个类,它们首先通过实体框架代码映射到DB表。
class Device {
public int Id {get;set;}
public virtual List<Point> Points {get;set;}
}
class Point {
public int Id {get;set;}
public string Name {get;set;}
public virtual List<Record> Records {get;set;}
public virtual Device Device {get;set;}
}
class Record {
public int Id {get;set;}
public DateTime Date {get;set;}
public double Value {get;set;}
public virtual Point Point {get;set;}
}
每个Device
都有一个Points
列表,每个Point
都有一个Records
列表,相应的导航属性会返回给父母。这一切都很有效,除了在序列化时丢失了与数据库的连接。
问题:我有Device
个Points
个,每个包含10个Records
。我序列化Device
并关闭我的应用程序。同时,收集服务应用程序为数据库中的每个Records
增加了50 Point
个Device
。当我启动原始应用并反序列化Records
时,这些点只包含我第一次运行时的10 Records
,而不是Point
中实际存在的60 point.Records
数据库。
我是否认为这一切都错了?我有办法强迫Records
始终从数据库中获取$scope
吗?
答案 0 :(得分:1)
TL; DR:是的,您正在考虑错误。
实体框架是一种ORM(对象关系映射):换句话说,它是将对象链接到关系数据库并将这些关系持久保存到对象模型的一种方法。
然而,它不是双向约束。你说你已经从数据库中提取了对象,然后对它们进行了序列化,然后在对它们进行反序列化时,你会惊讶地发现它们与序列化它们时是一样的。问题:我有一个装满点的设备,每个包含10个 记录。我序列化设备并关闭我的应用程序。同时,一个 收集服务应用程序为每个Point添加50多条记录 数据库。当我启动原始应用程序并反序列化设备时, 这些点只包含我第一次运行的10条记录,而不是 60数据库中该点实际存在的记录。
考虑一下:你在某个地方保存了一组对象,并且在检索它们时它们是相同的。如果它有任何其他方式,我会感到震惊!
让他们更新并显示在数据库中所做的更改的唯一方法是实际转到数据库并检索更改。