我正在尝试仅使用DbContext Entry()
方法更改的字段执行更新,如StackOverflow here所述:
当我在Name
和StartDate
字段上执行此操作时,一切运行完美,我的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和其他一些。没有任何可能干扰的险恶我不会想到。
答案 0 :(得分:1)
Company
似乎不是复杂的属性,而是导航属性,因此您无法使用点属性路径访问它。您需要获取相关实体的条目,然后将属性设置为相应的修改。