我正在编写一个WCF Rest API,为实体提供CRUD功能,例如学生。以下是它的定义方式:
class Student
{
Guid Id;
string Name;
string LastName;
string Age;
DateTime DOB;
}
我的服务合同是这样的:
class StudentService
{
[WebInvoke(Method = "POST")]
public void Add(Student student)
{...}
[WebInvoke(Method = "PUT")]
public void Update(Student student)
{...}
[WebGet()]
public void Get(string Id)
{...}
}
现在的问题是,在更新学生记录时,客户可能无法提供完整的数据。对于例如它可能提供Id和DOB但没有名称和LastName。 Id是必填字段。在这种情况下,我需要知道什么是最好的方法/设计?
我可以从db获取现有记录并在两者上执行比较然后根据需要进行更新。这种方法的问题是我无法知道用户是否真的想要将字段更新为null。然后,比较似乎不是一个整洁的设计。有什么想法吗?
答案 0 :(得分:0)
发送sp中的所有值,然后在更新记录写入case语句以检查null时 您可以在Update Statement中检查isnull,因此当参数为null时,请使用它们自己的值
更新它们像
更新学生 设置Name = case isnull(@ Name,'')=''然后命名为@Name end 其中Id = 1127871
答案 1 :(得分:0)
在完成处理此类事情的各种策略后,我实现了这个问题的答案中描述的内容:Only update some properties on an EF entity that are not set to null。
简而言之,我正在跟踪在反序列化期间设置的属性,然后仅更新这些属性。