1

[一切都被剥离以突出问题]

SchemeRequest
------------------------------
Id
SchemeId [FK to Schemes Table]
------------------------------

using(var scope = new TransactionScope())
{
    var request = new SchemeRequest { SchemeId = [schemeId] };
    this.dbContext.SchemeRequests.Add(request);
    this.dbContext.SaveChanges();

    this.mailer.SendMail(request); // request.Scheme is null when it should not be

    scope.Complete();
}

我首先使用 EF 模型。现在调用 SaveChanges 后,SchemeRequest 中的导航属性 Scheme 为空。我不确定为什么。任何人都可以帮忙吗?还有另一个导航属性似乎工作正常。我如何调试这个,即我如何找出幕后发生的事情。?

我检查并仔细检查了关系、属性等,但一切似乎都很好。

4

1 回答 1

1

预计不会加载导航属性。您只保存一个新实体而不设置其导航属性。当您保存父实体时,EF 不会自动加载另一个实体。

但是,导航属性将在两种情况下设置:

  • 您在 new 中设置的Scheme已加载并附加到上下文。EF 会自动修复关系并设置导航属性。SchemeIdSchemeRequest

  • 如果您使用延迟加载,导航属性将在SchemeId您访问它后立即加载。但是,您需要创建新SchemeRequest的作为延迟加载代理,而不是使用new

    var request = this.dbContext.SchemeRequests.Create();
    request.SchemeId = schemeId;
    
于 2012-04-30T13:11:57.320 回答