我需要做的是这样......为什么EF在分离时删除子实体?
- 得到分贝上下文(UtilitiesContext)
- 查询它的一些数据(看了一下目录)
- 还拉从DB的孩子时,我拉WD的(AdditionalData)
- 处置方面
- 继续使用实体
...
// step 1
using (var db = new UtilitiesContext(false))
{
var jsonSettings = new JsonSerializerSettings { MaxDepth = 2, ReferenceLoopHandling = ReferenceLoopHandling.Ignore };
// step 2
var dirs = db.GetAll<WatchedDirectory>();
// step 3 (lazy load and serialize the WD and its additional data)
log.Debug(JsonConvert.SerializeObject(dirs, jsonSettings));
foreach (var d in dirs)
{
try
{
log.Debug(" Initialising monitoring for path " + d.UNCPath);
// detach the object and its data items from the db
db.Detach(d);
d.AdditionalData.ForEach(i => db.Detach(i));
// here the AdditionalData property serialises an empty array
log.Debug(JsonConvert.SerializeObject(d, jsonSettings));
// step 4 happens down here
我的问题是,我得到我想要在第一日志输出(行标步骤3) 再后来的数据时,我再说一遍,孩子收集不见了,我所做的只是分离的实体从上下文。
我的分离方法看起来像这样...
public void Detach(object entity)
{
Entry(entity).State = EntityState.Detached;
}
如果你打算处理上下文,你应该先将它们映射到DTO。如果你按照你现在的路线,我相信你会有更多的问题。处理上下文作用域之外的实体对象需要解决问题。 –
我也曾考虑过......这些都是非常简单的实体,所以我认为这样可以节省代码重复 – War
我试过在过去做过类似的事情,它总是回来咬你屁股最后,现在更容易进行映射,而不是在稍后的时间点进行映射,在这些时间点你需要重新编写大量的代码,而这些代码最终会让你失望。 –