以下是我通常从数据库中检索对象的方法:
Dim Prod = (From P In Db.Products Where P.ProductID = 123).FirstOrDefault()
现在,我需要实现一个可以像这样调用的“load”实例方法:
Dim Prod = New Product()
Prod.Load(123)
如何从数据库中填充现有的Product对象?我试图避免使用反射或任何杂乱的复制方法。
我正在尝试做这样的事情:
Public Overridable Sub Load(ByVal ProductID As Integer)
Db.Products.Where(Function(P) P.ProductID = ProductID).Populate(Me)
End Sub
答案 0 :(得分:1)
您最接近的是在您的实体对象上使用DbEntityEntry.Reload
,然后使用DbEntityEntry.Reference
和DbEntityEntry.Collection
方法获取DbReferenceEntry
的实例和DbCollectionEntry
,用于实体上的每个导航属性和集合,您可以使用它们重新加载这些成员。像这样:
Public Overridable Sub Load(ByVal ProductID As Integer)
' Set primary key
Me.ProductID = ProductID
' Reload scalar/complex properties
Db.Entry(Me).Reload()
' Reload navigation properties
Db.Entry(Me).Reference(Function(p) p.Entity).Load()
Db.Entry(Me).Reference(Function(p) p.OtherEntity).Load()
' Reload navigation collections
Db.Entry(Me).Collection(Function(p) p.ChildEntities).Load()
Db.Entry(Me).Collection(Function(p) p.OtherChildEntities).Load()
End Sub