假设我有一个通用的记录表(我首先使用EF代码),并且可以有许多不同类型的详细信息与此表一起使用:
class Record{
int Id,
int TypeOfDetails, // int enum Type1, Type2
string Details, //string with json content
string Attribute 1,
string Atribute 2,
...
}
class DetailsType1{
string InternalAtribute1,
....
}
我决定使用Json将Details对象序列化到数据库字段中。这允许在不更改数据库模式的情况下灵活地处理不同的详细信息。
处理一条记录很容易,我知道Details对象的类型,所以我可以序列化和反序列化。
但是如何有效地检索多个记录并能够在MVC中引用详细信息呢?假设我这样做:
var results = await context.Record.Where(..).ToAsyncList();
我希望能够在我的.cshtml:中做到这一点
@Html.DisplayFor(modelItem => item.Record.Details.InternalAtribute1)
从本质上讲,它将动态地进行反序列化。。
或者,如果AngularJS中可能存在类似的内容,也会有所帮助。
如果我把问题说清楚,请告诉我。
我会回答我的问题。我想得最好的是:
class Record{
int Id { get; set; }
int TypeOfDetails { get; set; } // int enum Type1, Type2
string JsonDetails { get; set; } //string with json content
string Attribute1 { get; set; }
string Atribute2 { get; set; }
...
[NotMapped]
public JObject Details { get; set; }
public void PopulateDetails()
{
Details = JObject.Parse(JsonDetails);
}
}
您仍然需要对所有查询结果执行PopulateDetails,我在foreach循环中执行。然后在CSHTML中,你可以这样做:
@item.Details["InternalAtribute1"])
可以显示内部Json对象的详细信息。