我现在面临一个概念问题,我一直在试图解决这个问题,但无法找到一个好的解决方案.
1:n关联
所以datamodel看起来像这样:
public class Person { public int Id { get; set; } public string Name { get; set; } public virtual ICollection<Person> Children { get; set; } }
Serverside我有一个接口,负责将新创建的dtos(包括子集合中的新项目)从客户端附加到datacontext并保存.这当然只有在客户端创建这些实体然后发送才能添加时才有效.该服务添加新实体并重新回溯更新的实体(主要是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:m通过手动映射关联
数据模型的不同部分如下所示:
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 Entities,我知道它们,但我真的对一个纯粹基于EF 4.2 POCO的解决方案感兴趣.
解决方法
最初这可能看起来像一个非常冗长的apprach,但IMO它最终得到回报,因为你有很多明确的控制你的接口,在很多情况下,你真的不需要将整个域模型(及其所有关系)转移到客户端,客户端一般只能显示这么多数据.
另一个选项可能是WCF DataServices,他们会使用RESTful接口来传输您的数据.
[新选项]
我过去使用的另一个选项基本上只是一个采用字节数组的CRUD服务方法.
使用NetDataContractSerializer将对象图与这些方法序列化/反序列化.然后使用自定义客户端来回传输数据,创建对象并将它们附加到DataContext来进行操作….
像this这样的东西
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。