【发布时间】:2016-07-14 15:51:37
【问题描述】:
我需要做一些类似...的事情
- 获取数据库上下文 (UtilitiesContext)
- 查询一些数据(监视目录)
- 当我拉出 WD(附加数据)时,还要从数据库中拉出孩子
- 处理上下文
- 继续使用实体
...
// 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。我相信如果您遵循当前的道路,您将遇到更多问题。在上下文范围之外使用实体对象是自找麻烦。
-
是的,我已经考虑过了……这些都是非常简单的实体,所以我认为这可能可以节省代码重复
-
我过去曾尝试做类似的事情,但它最终总是会咬你一口,现在做映射比让它工作到稍后的时间点更容易当你最终崩溃时,你需要重新编写大量代码。
标签: c# entity-framework detach