EF NotMapped& JsonIgnore属性导致代码优先问题

时间:2014-10-24 01:45:37

标签: c# .net entity-framework

我有一些模型类,它们被用作实体框架代码优先模型。我在这些模型上有一些不属于数据库模式的属性,为了确保实体框架不会混淆,我使用[NotMapped]属性标记了这些属性。当我为模型生成代码优先迁移时,这些属性被正确忽略。

但是,我最近为这些相同的属性添加了[JsonIgnore]属性,因为模型类正在被去序列化,并且这些属性不适合包含在序列化中。这也很好 - 但它有一个非常奇怪的结果,即EF代码优先迁移无法识别[NotMapped]属性。现在我得到的错误是实体框架认为模型类与数据库不同步 - 但是当我生成新的迁移时,它认为它需要为所有以前未映射的属性添加列。从这些属性中删除[JsonIgnore]属性可解决此问题。

我发现这个问题在实体框架的上下文之前已经经历过这个问题(没有回答):Applying [JsonIgnore] to property causes DataAnnotation attributes to be "lost"

这是C#属性系统的一个易于理解的行为吗?或者它是否特定于[JsonIgnore]属性 - 如果是,导致它的原因是什么?

1 个答案:

答案 0 :(得分:2)

尝试使用[DataContract][DataMember]属性来定义要序列化的属性。

[DataContract]
public class EntityA
{
    [DataMember]
    public string SerializeThisProperty { get; set; }

    [NotMapped]
    public string DoNotSerializeThisProperty { get; set; }
}