Database 如何知道WCF DataContract代表的是持久实体还是暂时实体?

Database 如何知道WCF DataContract代表的是持久实体还是暂时实体?,database,wcf,web-services,nhibernate,Database,Wcf,Web Services,Nhibernate,如果您不想向WCF服务的客户机公开域对象的ID,那么您显然不会在DataContract中放置ID属性,对吗?但是,当客户机在您的服务上调用save方法时,您如何知道它是新对象,还是已修改的现有对象 使用NHibernate,您可以使用SaveOrUpdate,它将检查Id和未保存的值,但是当您收到没有Id的DataContract时,您无法知道它是要保存到数据库的新记录,还是要更新的现有记录 您将如何解决这个问题?数据契约表示您希望它表示的任何内容 如果您不想公开实际ID,那么可以公开某种备用

如果您不想向WCF服务的客户机公开域对象的ID,那么您显然不会在DataContract中放置ID属性,对吗?但是,当客户机在您的服务上调用save方法时,您如何知道它是新对象,还是已修改的现有对象

使用NHibernate,您可以使用SaveOrUpdate,它将检查Id和未保存的值,但是当您收到没有Id的DataContract时,您无法知道它是要保存到数据库的新记录,还是要更新的现有记录


您将如何解决这个问题?

数据契约表示您希望它表示的任何内容


如果您不想公开实际ID,那么可以公开某种备用键,然后通过该备用键查找真实实体。例如,您可以公开Guid类型的ID,并维护您自己的字典或查找表到实际ID的映射Guid。当然,这现在引入了一些您需要维护的状态。

我反对您的逻辑-您要向客户机公开的实体应该有其唯一的ID-这是您唯一的“安全”句柄以唯一地标识和查找实体

客户端应用程序绝对不应显示系统内部唯一ID,但它确实需要在服务和客户端之间移动,以便服务知道在客户端返回更新或删除请求时操作哪个对象

马克