使用外键属性定义的加载引用属性

时间:2017-11-15 18:34:49

标签: c# asp.net-mvc entity-framework-6

我有一个复杂的视图,它返回一个具有多个引用属性的实体。 当我直接从数据库显示对象时,我可以使用显式加载来获取加载的引用属性,然后再将模型传递给View。

当ModelState无效时,我想传递用户发送给我的对象的版本(因此我可以维护用户更改的值),并向用户显示验证错误。但是,为了加载视图,我需要加载所有的Reference和Navigation属性。

这不起作用:

_db.Entry(workOrder).Reference(a => a.RecordTracker).Load();

运行此操作后,workOrder.RecordTracker仍然为空。

但这个笨重的东西确实有效:

workOrder.RecordTracker = _db.RecordTrackers.Find(((WorkOrder)(_db.Entry(workOrder).GetDatabaseValues().ToObject())).RecordTrackerID);

我确定我错过了什么。

真正令人感到奇怪的是,这些属性可以正常使用:

_db.Entry(workOrder).Reference(a => a.DocumentNumber).Load();
_db.Entry(workOrder).Reference(a => a.Vendor).Load();
_db.Entry(workOrder).Reference(a => a.CreatedFromDocument).Load();

RecordTracker与这些类之间的一个区别是,它们有一个返回WorkOrder定义的引用,RecordTracker从一个方向链接到WorkOrder

类之间的另一个区别是在Document(WorkOrder的基类)中,我像这样定义RecordTrackerID

    [ForeignKey("RecordTracker")]
    public int RecordTrackerID { get; set; }

DocumentNumber是在流畅的API中定义的。

modelBuilder.Entity<Document>().HasRequired(d => d.DocumentNumber).WithRequiredPrincipal(d => d.Document).Map(m => m.MapKey("DocumentID")).WillCascadeOnDelete(true);

我确实需要访问RecordTrackerID类型中的Document字段。

我更改了代码以在Fluent API中定义关系,并且负载工作正常。我无法访问文档类中的RecordTrackerID

那么:当使用外键属性而不是通过模型构建器中的Fluent API在类中定义关系时,是否可以加载相关的引用属性?

或者,可以访问&#34; MapKey&#34;因为一个领域也可以。

0 个答案:

没有答案