c# – 如何在基于WCF的方案中管理EF 4.2关联
我正在开发一个企业应用程序,它将包含一个丰富的
WPF客户端,该客户端与一堆web服务进行通信以检索数据.此数据是POCO,使用Code First EF 4.2创建.
我现在面临一个概念问题,我一直在试图解决这个问题,但无法找到一个好的解决方案. 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的解决方案感兴趣. PPS:代码是手工编写到这个窗口而不是实际使用的代码,所以可能会丢失一些东西,但这不是我的问题,所以我希望它就足够了. 解决方法
我有一个类似的解决方案,我们需要一大堆CRUD类型的操作,但我们的数据模型不会离开服务器,我们使用automapper将对象映射到单独的DTO,这些DTO通常是WCF DatContract类,并且没有尽可能多的关系.域模型.
最初这可能看起来像一个非常冗长的apprach,但IMO它最终得到回报,因为你有很多明确的控制你的接口,在很多情况下,你真的不需要将整个域模型(及其所有关系)转移到客户端,客户端一般只能显示这么多数据. 另一个选项可能是WCF DataServices,他们会使用RESTful接口来传输您的数据. [新选项] 我过去使用的另一个选项基本上只是一个采用字节数组的CRUD服务方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- net.sf.json.JSONException: Object is null
- cocos2dx 加载cocostudio创建的exportjson文件 不同图片之间
- PostgreSQL9.5新特性之行级安全性及其应用级解决方案
- 《MySQL必知必会》学习笔记四(正则表达式)------掌握部分
- 使用Flex代码清除ArcGIS Server 10 REST缓存
- c# – 最后一次Xamarin.iOS更新后的SIGABRT错误
- xml布局自定义SurfaceView模板
- 安装IIS 7以后无法启动依赖服务windows process activation
- 获取字符串中含有的数字
- 在C语言中利用PCRE实现正则表达式