实体框架:填充现有对象实例

时间:2013-05-14 18:02:58

标签: .net vb.net entity-framework

以下是我通常从数据库中检索对象的方法:

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

1 个答案:

答案 0 :(得分:1)

您最接近的是在您的实体对象上使用DbEntityEntry.Reload,然后使用DbEntityEntry.ReferenceDbEntityEntry.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