错误取决于我的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等。 如何防止此字段的序列化? 感谢
答案 0 :(得分:0)
[JsonIgnore]
属性告诉JSON格式化程序在序列化期间忽略该属性,但它仍然是EF模型的一部分,它仍然出现在从DbContext
生成的元数据中。序列化和元数据是不同的问题。
您可以通过将EDM [NotMapped]
属性添加到模型中的属性来隐藏元数据。
如果您不想触摸您的模型,可以通过DbContext
中的Fluent配置告知EF忽略它,例如,
modelBuilder.Entity<Customer>().Ignore(t => t.CustomerID_OLD);
如果您需要在服务器逻辑中访问该属性但从Breeze元数据中隐藏,则可以创建一个继承自您的工作MetadataDbContext
的专用DbContext
并在其中放置“忽略”代码。有关示例,请参阅DocCode中的NorthwindMetadataContext
。
提醒:通常,您只能隐藏EF中的可空属性。这将适用于您的情况,因为非可空属性具有在数据库模式中定义的默认值。否则,数据库将拒绝插入。