使用context.Entry()在EF 5中执行部分更新的异常

时间:2013-01-10 01:56:52

标签: .net entity-framework entity-framework-5 dbcontext

我正在尝试仅使用DbContext Entry()方法更改的字段执行更新,如StackOverflow here所述:

当我在NameStartDate字段上执行此操作时,一切运行完美,我的SQL UPDATE语句仅包含更新过程中的Name和StartDate,而不是我实体的每个字段,但是当我现在尝试更新子对象的属性,例如Company.TradingName我收到此异常:

  

“物业路径'Company.TradingName'中的物业'公司'   不是'特许经营'类型的复杂财产。属性路径必须是   由除最终属性之外的所有复杂属性组成。“

我的代码只是遍历字符串数组(new[] {"Name", "StartDate", "Company.TradingName"}),就像这样(其中item是我的属性所属的特许经营实体):

foreach (var propertyName in changedPropertyNames)
{
    _context.Entry(item).Property(propertyName).IsModified = true;
}

有什么想法吗?根据EF docs here的“获取和设置复杂属性的当前值或原始值”部分中的文档,更新复杂属性 应。

<小时/> 按要求建模(由EF5生成):

public partial class Franchise
{
    public System.Guid Id { get; set; }
    public string Name { get; set; }
    public System.DateTime StartDate { get; set; }

    public virtual Company Company { get; set; }
}

Company模型也很简单,只有公共字符串Name,TradingName和其他一些。没有任何可能干扰的险恶我不会想到。

1 个答案:

答案 0 :(得分:1)

Company似乎不是复杂的属性,而是导航属性,因此您无法使用点属性路径访问它。您需要获取相关实体的条目,然后将属性设置为相应的修改。