我有一个复杂的视图,它返回一个具有多个引用属性的实体。 当我直接从数据库显示对象时,我可以使用显式加载来获取加载的引用属性,然后再将模型传递给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;因为一个领域也可以。