C# DbPropertyValues.SetValues是否可以反向使用以从实体';什么是当前值?
实体框架方法是否可以反向使用,根据实体中属性的当前值设置对象(即视图模型或数据传输对象)的值 这是一个示例,说明了我如何将SetValues与DTO一起使用,仅更新我在DTO的类定义中指定的属性C# DbPropertyValues.SetValues是否可以反向使用以从实体';什么是当前值?,c#,entity-framework,C#,Entity Framework,实体框架方法是否可以反向使用,根据实体中属性的当前值设置对象(即视图模型或数据传输对象)的值 这是一个示例,说明了我如何将SetValues与DTO一起使用,仅更新我在DTO的类定义中指定的属性 public Address UpdateAddress(Address address) { using (var context = new OrdersContext()) { var targetAddress = context.Addresses.FirstO
public Address UpdateAddress(Address address)
{
using (var context = new OrdersContext())
{
var targetAddress = context.Addresses.FirstOrDefault(a => a.AddressID == address.AddressID && a.User.UserName.ToLower() == HttpContext.Current.User.Identity.Name.ToLower());
if (targetAddress == null) return null; // Address not found or user doesn't own this address.
context.Entry(targetAddress).CurrentValues.SetValues(address);
context.SaveChanges();
return new Address
{
AddressID = targetAddress.AddressID,
AddressLine1 = targetAddress.AddressLine1,
AddressLine2 = targetAddress.AddressLine2,
City = targetAddress.City,
State = targetAddress.State,
ZipCode = targetAddress.ZipCode
};
}
}
public class Address
{
public int AddressID { get; set; }
public string AddressLine1 { get; set; }
public string AddressLine2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string ZipCode { get; set; }
// public string UserID { get; set; } // UserID is excluded from the view model so that it cannot be updated.
}
正如SetValues上的文档所示
给定对象可以是任何类型。对象上具有
与字典中的属性名称匹配并可读取的名称,
将被阅读。其他属性将被忽略。这允许复制
来自简单数据传输对象(DTO)的属性
SetValues是否可以反向使用以设置实体中DTO的值,这样就不必逐个手动设置这些值?或者有没有另一种方法可以像SetValues那样工作,但反过来呢
还有另外一种,但它不适用于DTO
我想这样做:
public Address UpdateAddress(Address address)
{
using (var context = new OrdersContext())
{
var targetAddress = context.Addresses.FirstOrDefault(a => a.AddressID == address.AddressID && a.User.UserName.ToLower() == HttpContext.Current.User.Identity.Name.ToLower());
if (targetAddress == null) return null; // Address not found or user doesn't own this address.
context.Entry(targetAddress).CurrentValues.SetValues(address);
context.SaveChanges();
return context.Entry(targetAddress).ToObject(new Address());
}
}
谢谢