Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# POCO DomainService和客户端DomainContext EntityCollection缺少实体_C#_Associations_Poco_Domainservices_Entitycollection - Fatal编程技术网

C# POCO DomainService和客户端DomainContext EntityCollection缺少实体

C# POCO DomainService和客户端DomainContext EntityCollection缺少实体,c#,associations,poco,domainservices,entitycollection,C#,Associations,Poco,Domainservices,Entitycollection,我有一个MainBusinessLine类型,其ObservableCollection类型为Group,我从DomainService调用了一个方法,返回一个可查询的MainBusinessLines列表。因此,在这个方法中,我已确认所有适当的组都已添加到MainBusinessLines组集合中。但是,当实体加载到客户端silverlight应用程序中时,几乎会丢失所有实体。但更重要的是,MainBusinessLine有另一个集合,在客户端加载操作之后,它确实包含了所有适当的实体。我的关联

我有一个MainBusinessLine类型,其ObservableCollection类型为Group,我从DomainService调用了一个方法,返回一个可查询的MainBusinessLines列表。因此,在这个方法中,我已确认所有适当的组都已添加到MainBusinessLines组集合中。但是,当实体加载到客户端silverlight应用程序中时,几乎会丢失所有实体。但更重要的是,MainBusinessLine有另一个集合,在客户端加载操作之后,它确实包含了所有适当的实体。我的关联属性也是一样的,这意味着thisKey和otherKey的参数设置类似

我还创建了POCO类,而不是使用EntityFramework。以下是我的MainBusinessLine类示例:

[Serializable,
DataContract]
public class MainBusinessLine : BaseDataContract
{
    public MainBusinessLine()
    {

    }

    private int _MainBusinessLineID;
    [Key,
    DataMember,
    Required]
    public int MainBusinessLineID
    {
        get
        {
            return _MainBusinessLineID;
        }
        set
        {
            if (_MainBusinessLineID == value)
                return;

            ReportPropertyChanging("MainBusinessLineID");
            _MainBusinessLineID = value;
            ReportPropertyChanged("MainBusinessLineID");
        }
    }

    private ObservableCollection<LOBs> _DefaultLOBs;
    [DataMember,
    XmlIgnore,
    SoapIgnore,
    Include,
    Association("DefaultLOBsCollection", "MainBusinessLineID", "MainBusinessLineID")]
    public ObservableCollection<LOBs> DefaultLOBs
    {
        get
        {
            return _DefaultLOBs;
        }
        set
        {
            ReportPropertyChanging("DefaultLOBs");
            _DefaultLOBs = value;
            ReportPropertyChanged("DefaultLOBs");
        }
    }



    private ObservableCollection<Groups> _Groups;
    [DataMember, 
    Include,
    Association("GroupsCollection", "MainBusinessLineID", "MainBusinessLineID")]
    public ObservableCollection<Groups> Groups
    {
        get
        {
            return _Groups;
        }
        set
        {
            ReportPropertyChanging("Groups");
            _Groups = value;
            ReportPropertyChanged("Groups");
        }
    }
}

有人能告诉我这里可能出了什么问题吗?我觉得这与我设置关联属性的方式有关。谢谢

您的
公共ObservableCollection DefaultLOBs
属性上的
XmlIgnore
SoapIgnore
属性是否是您没有看到“主业务线”的原因集合?

您的
public observateCollection DefaultLOBs
属性上的
XmlIgnore
SoapIgnore
属性是否是您没有看到“MainBusinessLines”集合的原因?

好的,所以我终于找到了我做错的地方。因此,我将对如何建立“POCO域服务”给出一个简短但详细的解释。我相信这不是唯一的方法,但这是我找到的最简单的方法,而且它是有效的。希望这能帮别人省下一周的头疼和沮丧

所以基本上,我的情况是,我有一个主业务线类型,它有一个Groups集合和一个DefaultLOBs集合。但我没有包括的是我有一个GroupsReference类型,它有一个MainBusinessLineID属性和一个GroupID属性。当我检索数据时,我继续遍历GroupsReference类型,并将这些组添加到父MainBusinessLine的GroupsCollection中。DefaultLOBsCollection也是如此。因此,在从DomainService“查询”集合之前,我填充了集合,出现了问题

经过思考和阅读我所能找到的一切,编码之神终于同情我,并给了我答案。我将检索数据并创建每种类型的列表,而不填充任何关联的集合属性。然后在相应的查询方法中返回列表asqueryable(),客户端上生成的实体的EntityCollections将被填满

总之,如果您使用正确的键设置了Include和Association属性,并且没有尝试强制数据,那么您应该成功了。我将包括我的新示例代码,希望这将有助于其他人

[Serializable,  
DataContract]  
public class MainBusinessLine : BaseDataContract  
{  
    Int32 _MainBusinessLineID;
    [Key,
    DataMember,
    Required]
    public Int32 MainBusinessLineID
    {
        get
        {
            return _MainBusinessLineID;
        }
        set
        {
            if (_MainBusinessLineID == value)
                return;

            _MainBusinessLineID = value;
            ReportPropertyChanged("MainBusinessLineID");
        }
    }

    ObservableCollection<GroupsReference> _GroupsReferenceCollection;
    [DataMember,
    Include,
    Association("GroupsReferenceCollection", "MainBusinessLineID", "MainBusinessLineID")]
    public ObservableCollection<GroupsReference> GroupsReferenceCollection
    {
        get
        {
            return _GroupsReferenceCollection;
        }
        set
        {
            _GroupsReferenceCollection = value;
            ReportPropertyChanged("GroupsReferenceCollection");
        }
    }
}

[Serializable,  
DataContract]  
public class GroupsReference : BaseDataContract
{
    Int32 _GroupsReferenceID;
    [Key,
    DataMember,
    Required]
    public Int32 GroupsReferenceID
    {
        get
        {
            return _GroupsReferenceID;
        }
        set
        {
            if (_GroupsReferenceID == value)
                return;

            _GroupsReferenceID = value;
            ReportPropertyChanged("GroupsReferenceID");
        }
    }

    Int32 _MainBusinessLineID;
    [DataMember,
    Required]
    public Int32 MainBusinessLineID
    {
        get
        {
            return _MainBusinessLineID;
        }
        set
        {
            if (_MainBusinessLineID == value)
                return;

            _MainBusinessLineID = value;
            ReportPropertyChanged("MainBusinessLineID");
        }
    }

    Int32 _GroupID;
    [DataMember,
    Required]
    public Int32 GroupID
    {
        get
        {
            return _GroupID;
        }
        set
        {
            if (_GroupID == value)
                return;

            _GroupID = value;
            ReportPropertyChanged("GroupID");
        }
    }
}  

[Serializable,  
DataContract]  
public class Group : BaseDataContract  
{  
    Int32 _GroupID;
    [Key,
    DataMember,
    Required]
    public Int32 GroupID
    {
        get
        {
            return _GroupID;
        }
        set
        {
            if (_GroupID == value)
                return;

            _GroupID = value;
            ReportPropertyChanged("GroupID");
        }
    }

    ObservableCollection<GroupsReference> _GroupsReferenceCollection;
    [DataMember,
    Include,
    Association("GroupsReferenceCollection", "GroupID", "GroupID")]
    public ObservableCollection<GroupsReference> GroupsReferenceCollection
    {
        get
        {
            return _GroupsReferenceCollection;
        }
        set
        {
            _GroupsReferenceCollection = value;
            ReportPropertyChanged("GroupsReferenceCollection");
        }
    }
}  

[EnableClientAccess(RequiresSecureEndpoint = false)]
public class DentalAdminPortalDomainService : DomainService
{

    public DentalAdminPortalDomainService()
    {
        AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
    }


    [Query]
    public IQueryable<MainBusinessLine> GetMainBusinessLines()
    {
        return DataRepository.GetMainBusinessLines().AsQueryable<MainBusinessLine>();
    }

    [Query]
    public IQueryable<Groups> GetGroups()
    {
        return DataRepository.GetGroups().AsQueryable<Groups>();
    }

    [Query]
    public IQueryable<GroupLOBList> GetGroupsReference()
    {
        return DataRepository.GetGroupsReferences().AsQueryable<GroupsReference>();
    }  
}  
[可序列化,
数据合同]
公共类主业务线:BaseDataContract
{  
Int32(主营业务线ID);
[关键,
数据成员,
必需的]
公共Int32主业务线ID
{
得到
{
return\u mainbusinelineid;
}
设置
{
if(_mainbusinelineid==值)
返回;
_MainBusinessLineID=值;
ReportPropertyChanged(“MainBusinessLineID”);
}
}
可观测集合(u组)参考集合;;
[数据委员会成员,
包括,,
关联(“GroupsReferenceCollection”、“MainBusinessLineID”、“MainBusinessLineID”)]
公共可见集合组引用集合
{
得到
{
返回组引用集合;
}
设置
{
_GroupsReferenceCollection=值;
报告财产变更(“集团参考集合”);
}
}
}
[可序列化,
数据合同]
公共类组引用:BaseDataContract
{
Int32_组参考ID;
[关键,
数据成员,
必需的]
公共Int32组引用ID
{
得到
{
返回_GroupsReferenceID;
}
设置
{
if(_GroupsReferenceID==值)
返回;
_GroupsReferenceID=值;
ReportPropertyChanged(“GroupsReferenceID”);
}
}
Int32(主营业务线ID);
[数据委员会成员,
必需的]
公共Int32主业务线ID
{
得到
{
return\u mainbusinelineid;
}
设置
{
if(_mainbusinelineid==值)
返回;
_MainBusinessLineID=值;
ReportPropertyChanged(“MainBusinessLineID”);
}
}
Int32_GroupID;
[数据委员会成员,
必需的]
公共Int32组ID
{
得到
{
返回_GroupID;
}
设置
{
if(_GroupID==值)
返回;
_GroupID=值;
ReportPropertyChanged(“GroupID”);
}
}
}  
[可序列化,
数据合同]
公共类组:BaseDataContract
{  
Int32_GroupID;
[关键,
数据成员,
必需的]
公共Int32组ID
{
得到
{
返回_GroupID;
}
设置
{
if(_GroupID==值)
返回;
_GroupID=值;
ReportPropertyChanged(“GroupID”);
}
}
可观测集合(u组)参考集合;;
[数据委员会成员,
包括,,
关联(“GroupsReferenceCollection”、“GroupID”、“GroupID”)]
公共可见集合组引用集合
{
得到
{
返回组引用集合;
}
设置
{
_GroupsReferenceCollection=值;
报告本身
[Serializable,  
DataContract]  
public class MainBusinessLine : BaseDataContract  
{  
    Int32 _MainBusinessLineID;
    [Key,
    DataMember,
    Required]
    public Int32 MainBusinessLineID
    {
        get
        {
            return _MainBusinessLineID;
        }
        set
        {
            if (_MainBusinessLineID == value)
                return;

            _MainBusinessLineID = value;
            ReportPropertyChanged("MainBusinessLineID");
        }
    }

    ObservableCollection<GroupsReference> _GroupsReferenceCollection;
    [DataMember,
    Include,
    Association("GroupsReferenceCollection", "MainBusinessLineID", "MainBusinessLineID")]
    public ObservableCollection<GroupsReference> GroupsReferenceCollection
    {
        get
        {
            return _GroupsReferenceCollection;
        }
        set
        {
            _GroupsReferenceCollection = value;
            ReportPropertyChanged("GroupsReferenceCollection");
        }
    }
}

[Serializable,  
DataContract]  
public class GroupsReference : BaseDataContract
{
    Int32 _GroupsReferenceID;
    [Key,
    DataMember,
    Required]
    public Int32 GroupsReferenceID
    {
        get
        {
            return _GroupsReferenceID;
        }
        set
        {
            if (_GroupsReferenceID == value)
                return;

            _GroupsReferenceID = value;
            ReportPropertyChanged("GroupsReferenceID");
        }
    }

    Int32 _MainBusinessLineID;
    [DataMember,
    Required]
    public Int32 MainBusinessLineID
    {
        get
        {
            return _MainBusinessLineID;
        }
        set
        {
            if (_MainBusinessLineID == value)
                return;

            _MainBusinessLineID = value;
            ReportPropertyChanged("MainBusinessLineID");
        }
    }

    Int32 _GroupID;
    [DataMember,
    Required]
    public Int32 GroupID
    {
        get
        {
            return _GroupID;
        }
        set
        {
            if (_GroupID == value)
                return;

            _GroupID = value;
            ReportPropertyChanged("GroupID");
        }
    }
}  

[Serializable,  
DataContract]  
public class Group : BaseDataContract  
{  
    Int32 _GroupID;
    [Key,
    DataMember,
    Required]
    public Int32 GroupID
    {
        get
        {
            return _GroupID;
        }
        set
        {
            if (_GroupID == value)
                return;

            _GroupID = value;
            ReportPropertyChanged("GroupID");
        }
    }

    ObservableCollection<GroupsReference> _GroupsReferenceCollection;
    [DataMember,
    Include,
    Association("GroupsReferenceCollection", "GroupID", "GroupID")]
    public ObservableCollection<GroupsReference> GroupsReferenceCollection
    {
        get
        {
            return _GroupsReferenceCollection;
        }
        set
        {
            _GroupsReferenceCollection = value;
            ReportPropertyChanged("GroupsReferenceCollection");
        }
    }
}  

[EnableClientAccess(RequiresSecureEndpoint = false)]
public class DentalAdminPortalDomainService : DomainService
{

    public DentalAdminPortalDomainService()
    {
        AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
    }


    [Query]
    public IQueryable<MainBusinessLine> GetMainBusinessLines()
    {
        return DataRepository.GetMainBusinessLines().AsQueryable<MainBusinessLine>();
    }

    [Query]
    public IQueryable<Groups> GetGroups()
    {
        return DataRepository.GetGroups().AsQueryable<Groups>();
    }

    [Query]
    public IQueryable<GroupLOBList> GetGroupsReference()
    {
        return DataRepository.GetGroupsReferences().AsQueryable<GroupsReference>();
    }  
}