Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DbPropertyValues.SetValues是否可以反向使用以从实体';什么是当前值?_C#_Entity Framework - Fatal编程技术网

C# DbPropertyValues.SetValues是否可以反向使用以从实体';什么是当前值?

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

实体框架方法是否可以反向使用,根据实体中属性的当前值设置对象(即视图模型或数据传输对象)的值

这是一个示例,说明了我如何将SetValues与DTO一起使用,仅更新我在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 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());
    }
}
谢谢