0

以下是我通常如何从数据库中检索对象:

Dim Prod = (From P In Db.Products Where P.ProductID = 123).FirstOrDefault()

现在,我需要实现一个可以像这样调用的“加载”实例方法:

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
4

1 回答 1

1

您将能够获得的最接近的是DbEntityEntry.Reload在您的实体对象上使用,然后使用DbEntityEntry.ReferenceandDbEntityEntry.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
于 2013-05-14T18:21:20.357 回答