如果您不想将域对象的ID公开给WCF服务的客户端,您显然不会在DataContract中放置ID属性,对吧?但是,当客户端在您的服务上调用save方法时,您如何知道它是一个新对象,还是一个被修改的现有对象?
使用NHibernate,您可以使用SaveOrUpdate,它将检查Id和未保存的值,但是当您收到没有ID的DataContract时,您无法知道它是否是要保存到数据库的新记录,或者要更新的现有记录。
你会如何解决这个问题?
答案 0 :(得分:1)
数据合约代表您希望它代表的任何内容。
如果您不想公开实际ID,则可以公开某种备用密钥,然后通过此备用密钥查找真实实体。例如,您可以公开Guid类型的ID,并维护您自己的字典或查找表,将Guid映射到实际ID。当然,这会引入一些你需要维护的状态。
答案 1 :(得分:1)
我会反对你的逻辑 - 你暴露给客户的实体应该拥有它的唯一ID - 这是你唯一的“安全”手段,可以唯一识别和找到你的实体。
客户端应用程序绝对不应该显示系统内部唯一ID - 但它确实需要在服务和客户端之间传输,以便服务在更新或删除请求从服务器返回时知道要操作哪个对象客户端。
马克