该错误取决于我的 SQL Server 数据库中的地理类型字段。此字段不可为空,并且具有默认属性。我尝试将 JsonIgnore 属性添加到该字段,但它仍然存在于元数据中,并且出现此错误:Breeze/BreezeMyPlace/Metadata 的元数据导入失败;无法处理返回的元数据:不可为空的 DataProperty 不能有 null defaultValue。名称:未定义。我正在使用 nuget 包“Breeze for ASP.NET Web API projects v. 1.3.3”、Entity Framework 5.0、JSon.NET 5.0.5 等。如何防止该字段的序列化?谢谢
问问题
459 次
1 回答
0
该[JsonIgnore]
属性告诉 JSON 格式化程序在序列化期间忽略该属性,但它仍然是 EF 模型的一部分,并且仍然出现在从DbContext
. 序列化和元数据是不同的关注点。
您可以通过将 EDM[NotMapped]
属性添加到模型中的属性来从元数据中隐藏它。
如果您不想触摸您的模型,您可以通过 Fluent Configuration 告诉 EF 忽略它DbContext
,例如,
modelBuilder.Entity<Customer>().Ignore(t => t.CustomerID_OLD);
如果您需要该属性可在服务器逻辑中访问但从 Breeze 元数据中隐藏,您可以创建一个MetadataDbContext
从您的工作继承的专用DbContext
并将“忽略”代码放在那里。请参阅NorthwindMetadataContext
DocCode 中的示例。
提醒:通常,您只能对 EF 隐藏可为空的属性。这将适用于您的情况,因为不可为空的属性具有在数据库模式中定义的默认值。否则,数据库将拒绝插入。
于 2013-05-22T19:40:20.547 回答