1

该错误取决于我的 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 等。如何防止该字段的序列化?谢谢

4

1 回答 1

0

[JsonIgnore]属性告诉 JSON 格式化程序在序列化期间忽略该属性,但它仍然是 EF 模型的一部分,并且仍然出现在从DbContext. 序列化和元数据是不同的关注点。

您可以通过将 EDM[NotMapped]属性添加到模型中的属性来从元数据中隐藏它。

如果您不想触摸您的模型,您可以通过 Fluent Configuration 告诉 EF 忽略它DbContext,例如,

modelBuilder.Entity<Customer>().Ignore(t => t.CustomerID_OLD);

如果您需要该属性可在服务器逻辑中访问但从 Breeze 元数据中隐藏,您可以创建一个MetadataDbContext从您的工作继承的专用DbContext并将“忽略”代码放在那里。请参阅NorthwindMetadataContextDocCode 中的示例。

提醒:通常,您只能对 EF 隐藏可为空的属性。这将适用于您的情况,因为不可为空的属性具有在数据库模式中定义的默认值。否则,数据库将拒绝插入。

于 2013-05-22T19:40:20.547 回答