我有一些模型类,它们被用作实体框架代码优先模型。我在这些模型上有一些不属于数据库模式的属性,为了确保实体框架不会混淆,我使用[NotMapped]
属性标记了这些属性。当我为模型生成代码优先迁移时,这些属性被正确忽略。
但是,我最近为这些相同的属性添加了[JsonIgnore]
属性,因为模型类正在被去序列化,并且这些属性不适合包含在序列化中。这也很好 - 但它有一个非常奇怪的结果,即EF代码优先迁移无法识别[NotMapped]
属性。现在我得到的错误是实体框架认为模型类与数据库不同步 - 但是当我生成新的迁移时,它认为它需要为所有以前未映射的属性添加列。从这些属性中删除[JsonIgnore]
属性可解决此问题。
我发现这个问题在实体框架的上下文之前已经经历过这个问题(没有回答):Applying [JsonIgnore] to property causes DataAnnotation attributes to be "lost"
这是C#属性系统的一个易于理解的行为吗?或者它是否特定于[JsonIgnore]
属性 - 如果是,导致它的原因是什么?
答案 0 :(得分:2)
尝试使用[DataContract]
和[DataMember]
属性来定义要序列化的属性。
[DataContract]
public class EntityA
{
[DataMember]
public string SerializeThisProperty { get; set; }
[NotMapped]
public string DoNotSerializeThisProperty { get; set; }
}