RIA 未使用 RIA 加载子实体银光

发布于 2024-12-11 14:37:40 字数 3889 浏览 0 评论 0原文

我在加载给定实体的某些子属性时遇到困难。我已经设法在其他对象上加载子实体,但不是这个。更令人沮丧的是,我尝试加载的子实体是从另一个实体引用的,因此它们工作正常......

我的代码如下。

ViewWasteApplication Page

Protected Overrides Sub OnNavigatedTo(ByVal e As System.Windows.Navigation.NavigationEventArgs)

    If NavigationContext.QueryString.ContainsKey("ID") Then

        ' load an existing record - edit mode
        Context.Load(Context.GetWasteApplicationsByIDQuery(Int32.Parse(NavigationContext.QueryString("ID").ToString())),
                     AddressOf wasteApplicationLoaded, Nothing)
    Else
        MessageBox.Show("Application not found")
    End If

End Sub

这将调用 GetWasteApplicationsByID - 如下所示:

Public Function GetWasteApplicationsByID(ByVal query As Int32) As IQueryable(Of WasteApplication)
    Dim result = Me.ObjectContext.WasteApplications.Include("CurrentlyWith") _
                                             .Include("Packaging") _
                                             .Include("WasteStream") _
                                             .Where(Function(f) f.ID = query)
    Return result
End Function

正在返回 WasteApplication,但 3 个子实体都没有出现。

我为此 WasteApplication 创建了一个 MetaData 类,如下所示:

<MetadataTypeAttribute(GetType(WasteApplications.WasteApplicationsMetaData))> _
Partial Public Class WasteApplications


Friend NotInheritable Class WasteApplicationsMetaData

    'Metadata classes are not meant to be instantiated.
    Private Sub New()
        MyBase.New()
    End Sub

    Public Property ID As Integer
    Public Property RequestedByName As String
    Public Property RequestedByExtension As String
    Public Property CARQRequired As Boolean
    Public Property OriginOfMaterialID As Integer
    Public Property Comments As String
    Public Property MaterialName As String
    Public Property PackagingID As Integer
    Public Property FacilityPath As String
    Public Property ProcessStatus As String
    Public Property DateSubmitted As DateTime
    Public Property RequestedByUsername As String
    Public Property CurrentlyWithID As Integer
    Public Property WasteStreamID As Integer

    <Include()>
    Public Property WasteStream As WasteStreams

    <Include()>
    Public Property Packaging As Packaging


End Class
End Class

任何人都可以看到这有什么问题吗?我在另一个页面上加载相同的两个子对象,这些似乎加载得很好。其代码如下:

查看化学应用(可行)

Protected Overrides Sub OnNavigatedTo(ByVal e As   System.Windows.Navigation.NavigationEventArgs)
         Context.Load(Context.GetChemicalApplicationsByIDQuery(Int32.Parse(NavigationContext.QueryString("ID"))),
                     AddressOf wasteApplicationLoaded, Nothing)

End Sub

使用 RIA 功能如下:

Public Function GetChemicalApplicationsByID(ByVal query As Int32) As IQueryable(Of ChemicalApplication)
    Return Me.ObjectContext.ChemicalApplications.Include("Chemical") _
                                                .Include("ProcessStatus") _
                                                .Include("PlanningApprover") _
                                                .Include("FacilitiesApprover") _
                                                .Include("MaintenanceApprover") _
                                                .Include("PPCPermit") _
                                                .Include("DischargeConsent") _
                                                .Include("Facility") _
                                                .Include("Packaging") _
                                                .Include("WasteStream") _
                                                .Where(Function(f) f.ID = query)
End Function

有什么建议吗?

注意:我尚未发布任何 XAML 绑定,因为我已通过调试确认源实体不包含子数据,因此绑定不会成为问题。

我将 Silverlight 4 与 Entity Framework 4 结合使用。

I am having difficulty loading some child attributes of a given entity. I have managed to load child entities on other objects, but not this one. To add to the frustration, the child entities I am trying to load are referenced from another Entity, and from this they work fine...

My code is as follows.

ViewWasteApplication Page

Protected Overrides Sub OnNavigatedTo(ByVal e As System.Windows.Navigation.NavigationEventArgs)

    If NavigationContext.QueryString.ContainsKey("ID") Then

        ' load an existing record - edit mode
        Context.Load(Context.GetWasteApplicationsByIDQuery(Int32.Parse(NavigationContext.QueryString("ID").ToString())),
                     AddressOf wasteApplicationLoaded, Nothing)
    Else
        MessageBox.Show("Application not found")
    End If

End Sub

This calls GetWasteApplicationsByID - which is as follows:

Public Function GetWasteApplicationsByID(ByVal query As Int32) As IQueryable(Of WasteApplication)
    Dim result = Me.ObjectContext.WasteApplications.Include("CurrentlyWith") _
                                             .Include("Packaging") _
                                             .Include("WasteStream") _
                                             .Where(Function(f) f.ID = query)
    Return result
End Function

The WasteApplication is being returned, but neither of the 3 child entities are appearing.

I have created a MetaData class for this WasteApplication, as follows:

<MetadataTypeAttribute(GetType(WasteApplications.WasteApplicationsMetaData))> _
Partial Public Class WasteApplications


Friend NotInheritable Class WasteApplicationsMetaData

    'Metadata classes are not meant to be instantiated.
    Private Sub New()
        MyBase.New()
    End Sub

    Public Property ID As Integer
    Public Property RequestedByName As String
    Public Property RequestedByExtension As String
    Public Property CARQRequired As Boolean
    Public Property OriginOfMaterialID As Integer
    Public Property Comments As String
    Public Property MaterialName As String
    Public Property PackagingID As Integer
    Public Property FacilityPath As String
    Public Property ProcessStatus As String
    Public Property DateSubmitted As DateTime
    Public Property RequestedByUsername As String
    Public Property CurrentlyWithID As Integer
    Public Property WasteStreamID As Integer

    <Include()>
    Public Property WasteStream As WasteStreams

    <Include()>
    Public Property Packaging As Packaging


End Class
End Class

Can anyone see anything wrong with this? I load the same two child objects on another page, and these seem to load just fine. The code for this is as follows:

View Chemical Application (This works)

Protected Overrides Sub OnNavigatedTo(ByVal e As   System.Windows.Navigation.NavigationEventArgs)
         Context.Load(Context.GetChemicalApplicationsByIDQuery(Int32.Parse(NavigationContext.QueryString("ID"))),
                     AddressOf wasteApplicationLoaded, Nothing)

End Sub

With the RIA function as follows:

Public Function GetChemicalApplicationsByID(ByVal query As Int32) As IQueryable(Of ChemicalApplication)
    Return Me.ObjectContext.ChemicalApplications.Include("Chemical") _
                                                .Include("ProcessStatus") _
                                                .Include("PlanningApprover") _
                                                .Include("FacilitiesApprover") _
                                                .Include("MaintenanceApprover") _
                                                .Include("PPCPermit") _
                                                .Include("DischargeConsent") _
                                                .Include("Facility") _
                                                .Include("Packaging") _
                                                .Include("WasteStream") _
                                                .Where(Function(f) f.ID = query)
End Function

Any suggestions?

NOTE: I have not posted any of the XAML bindings, as I have confirmed via debugging that the source entities do not contain the child data, so therefore binding will not be an issue.

I am using Silverlight 4 with Entity Framework 4.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

压抑⊿情绪 2024-12-18 14:37:40

您需要为要包含的实体创建元数据类,并使用 [Ininclude] 属性标记字段。

[MetadataTypeAttribute(typeof(Client.ClientMetadata))]
public partial class Client
{
    internal sealed class ClientMetadata
    {
        private ClientMetadata()
        {
        }

        [Required(ErrorMessage="You must enter a client name")]
        public string Name;

        [Include]
        public EntityCollection<Contact> Contacts;

        [Include]
        public Employee Employee;

        [Include]
        public BillTo BillTo;
    }
    }

请参阅 RIA 服务和关系数据了解更多。

You will need to create metadata classes for the entities you wish to include and mark the fields with the [Include] attribute.

[MetadataTypeAttribute(typeof(Client.ClientMetadata))]
public partial class Client
{
    internal sealed class ClientMetadata
    {
        private ClientMetadata()
        {
        }

        [Required(ErrorMessage="You must enter a client name")]
        public string Name;

        [Include]
        public EntityCollection<Contact> Contacts;

        [Include]
        public Employee Employee;

        [Include]
        public BillTo BillTo;
    }
    }

See RIA Services and relational data for more.

鹿! 2024-12-18 14:37:40

您需要执行以下 2 件事才能使其正常工作:

a) 在元数据类中添加 include 参数(如 DaveB 建议的那样)

b) 在域服务查询(服务器端)上添加 include 指令 - Me.ObjectContext。 WasteApplications.Include("CurrentlyWith")

You need to do the 2 following things in order for this to work:

a) Add the include parameter in a metadata class (as DaveB proposed)

b) on the domain service queries (server side) add the include directive - Me.ObjectContext.WasteApplications.Include("CurrentlyWith")

2024-12-18 14:37:40

我设法解决了这个问题,您需要将相应的实体加载到数据上下文中以及加载链接的实体。即在我的情况下,我需要添加:

Context.Load(Context.GetWasteStreamsQuery())
Context.Load(Context.GetPackagingQuery())

以便链接的子实体存在。因此,我的完整 onNavigate 看起来像这样:

Protected Overrides Sub OnNavigatedTo(ByVal e As System.Windows.Navigation.NavigationEventArgs)

    If NavigationContext.QueryString.ContainsKey("ID") Then


        Context.Load(Context.GetWasteApplicationsByIDQuery(Int32.Parse(NavigationContext.QueryString("ID").ToString())),
                 AddressOf wasteApplicationLoaded, Nothing)

        Context.Load(Context.GetWasteStreamsQuery())
        Context.Load(Context.GetPackagingQuery())
    Else
        MessageBox.Show("Application not found")
    End If

End Sub

I managed to solve the issue, you need to load the respective entities into the datacontext as well as loading the linked entity. i.e in my case I need to add:

Context.Load(Context.GetWasteStreamsQuery())
Context.Load(Context.GetPackagingQuery())

so that the linked child entities exist. My full onNavigate therefore looks like this:

Protected Overrides Sub OnNavigatedTo(ByVal e As System.Windows.Navigation.NavigationEventArgs)

    If NavigationContext.QueryString.ContainsKey("ID") Then


        Context.Load(Context.GetWasteApplicationsByIDQuery(Int32.Parse(NavigationContext.QueryString("ID").ToString())),
                 AddressOf wasteApplicationLoaded, Nothing)

        Context.Load(Context.GetWasteStreamsQuery())
        Context.Load(Context.GetPackagingQuery())
    Else
        MessageBox.Show("Application not found")
    End If

End Sub
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文