我正在研究一个企业应用程序,该应用程序将包含一个丰富的WPF客户端,该客户端会与一堆webservices进行对话以检索数据。这些数据是使用Code First EF 4.2创建的POCO。如何在基于WCF的场景中管理EF 4.2关联
我现在面临着一个概念性的问题,我一直在试图围绕我的头,但无法找到一个好的解决方案。
1:N协会
因此数据模型是这样的:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Person> Children { get; set; }
}
Serverside集团我有这需要附加新创建的DTOS(包括儿童收集新项目)的护理接口从客户端到数据上下文并保存。这当然只适用于在客户端创建这些实体然后发送添加的实体。该服务添加新实体并返回更新的实体(主要是Id属性)。
[ServiceContract]
public interface IMyPersonCaretaker
{
[OperationContract]
Person CreatePerson(Person entity)
}
然而,当我取回已经存在的实体,我不能编辑任何关联(添加或删除实体 - 因为他们是固定的大小)。所以现在我就需要扩展接口,允许这样的:
[ServiceContract]
public interface IMyPersonCaretaker
{
[OperationContract]
Person CreatePerson(Person entity)
[OperationContract]
Person AddChild(Person parent, Person child)
}
这对我来说似乎是一个笨拙的方法和接口都越来越大,非常快。这是与POCO合作的复杂方法吗?你怎么做呢?
N:通过手动映射中号协会
数据模型的不同部分是这样的:
public class ClassA
{
public int Id { get; set; }
public virtual ICollection<AtoBMapping> Mappings { get; set; }
}
public class ClassB
{
public int Id { get; set; }
public virtual ICollection<AtoBMapping> Mappings { get; set; }
}
public class AtoBMapping
{
public int Id { get; set; }
public virtual ClassA A { get; set; }
public virtual ClassB B { get; set; }
}
每当我试图在客户端创建ClassA和ClassB的的一个实例,并通过绑定将它添加到对方,当我尝试将它添加到上下文中的Set时出现错误。该错误表示不允许从Mappings属性中移除项目,并且我不真正了解这些来自哪里。
第二部分可能有点过于抽象描述明智,如果有人需要更多的信息,我更愿意添加它! PS:请不要建议Selftracking实体,我知道他们,但我真的会对纯粹基于EF 4.2 POCOs的解决方案感兴趣。
PPS:代码是用手写入这个窗口而不是实际使用的代码,所以可能有东西丢失,但这不是我的问题的重点,所以我希望它就足够了。
您能否将更高级别的抽象作为您的服务接口公开?我通常喜欢将我的所有数据模型代码保存在服务中,并在服务上公开某种业务逻辑操作。因此,我可能不会使用像CreatePerson,AddChild这样的方法,而是使用更类似于软件中正在执行的操作的东西(难以在不知道您最终希望服务执行什么的情况下进行解释,对不起!)。 – kmp
@ user1039947最终的目标功能是管理类似这样的数据 - 简单的类有几个1:n的关联和更少的n:m关联。大部分时间数据正在被添加而不是被编辑。 – UrbanEsc