asp.net-mvc – 在数据库表中存储用户筛选查询参数的最佳方法是什么?
|
我有一个ASP.NET MVC网站.在我的后端,我有一个名为People的表,其中包含以下列: > ID 我有一个通用的网页,使用模型绑定来查询这些数据.这是我的控制器动作: public ActionResult GetData(FilterParams filterParams)
{
return View(_dataAccess.Retrieve(filterParams.Name,filterParams.Age,filterParams.location,. . .)
}
映射到这样的东西: http://www.mysite.com/MyController/GetData?Name=Bill .. . dataAccess层只是检查每个参数以查看它是否已填充以添加到db where子句.这非常有效. 我现在希望能够存储用户的过滤查询,我试图找出存储特定过滤器的最佳方法.由于某些过滤器在queryString中只有一个参数,而其他过滤器在过滤器中有10个字段,我无法找到将此查询“过滤信息”存储到我的数据库中的最优雅方式. 我能想到的选择是: >有一个完整的表复制(带有一些额外的cols),但称之为PeopleFilterQueries并在每个记录中填充一个FilterName并将过滤器的值放在每个字段中(Name等) 这种情况的最佳做法是什么? 解决方法如果目的是保存最近使用的过滤器列表,我会在模型绑定发生后将完整的FilterParams对象序列化为XML字段/列.通过将其保存到XML字段中,您还可以灵活地使用XQuery和DML,以便日后能够以更高性能为重点查询信息.public ActionResult GetData(FilterParams filterParams)
{
// Peform action to get the information from your data access layer here
var someData = _dataAccess.Retrieve(filterParams.Name,. . .);
// Save the search that was used to retrieve later here
_dataAccess.SaveFilter(filterParams);
return View(someData);
}
然后在您的DataAccess类中,您将需要两个方法,一个用于保存,另一个用于检索过滤器: public void SaveFilter(FilterParams filterParams){
var ser = new System.Xml.Serialization.XmlSerializer(typeof(FilterParams));
using (var stream = new StringWriter())
{
// serialise to the stream
ser.Serialize(stream,filterParams);
}
//Add new database entry here,with a serialised string created from the FilterParams obj
someDBClass.SaveFilterToDB(stream.ToString());
}
然后,当您想要通过Id检索已保存的过滤器时: public FilterParams GetFilter(int filterId){
//Get the XML blob from your database as a string
string filter = someDBClass.GetFilterAsString(filterId);
var ser = new System.Xml.Serialization.XmlSerializer(typeof(FilterParams));
using (var sr = new StringReader(filterParams))
{
return (FilterParams)ser.Deserialize(sr);
}
}
请记住,您的FilterParams类必须具有默认(即无参数)构造函数,并且您可以使用[XmlIgnore]属性来阻止属性根据需要序列化到数据库中. public class FilterParams{
public string Name {get;set;}
public string Age {get;set;}
[XmlIgnore]
public string PropertyYouDontWantToSerialise {get;set;}
}
注意:SaveFilter返回Void,为简洁起见,没有错误处理. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 使用Asp.net MVC 4中的OutputCacheAttribut
- asp.net-web-api – 无法在Mono / xsp4中加载类型’System.
- https://github.com/hoyuhub
- azure – 创建App Service订阅EMPTY
- ASP.NET MVC的OnResultExecuted方法中的ActionResult的filt
- asp.net-mvc – 使ASP.NET绑定指定media =屏幕的CSS bundle
- 如何以编程方式在ASP.NET MVC中显示/隐藏Razor View中的一个
- asp.net-mvc – MVC5 Html.RenderAction与不同的控制器
- ASP.NET拒绝尊重我的权限.
- asp.net-mvc – MVC与WebForms
- asp.net-mvc – 为什么要使用视图模型?
- asp.net-mvc – 获取Route,ASP.net MVC中的当前片
- asp.net-mvc-3 – 将原始html转储到Telerik网格
- asp.net – 身份cookie在一段时间后会丢失自定义
- asp.net-mvc – 启用SSL时,IIS默认为HTTPS的端口
- asp.net – WebMethod未被Visual Studio 2013中的
- asp.net-mvc-3 – Telerik MVC网格,在运行时从集
- asp.net-mvc – 如何从强类型视图中隐藏实体框架
- asp.net – 多个Application_Start事件触发
- asp.net-mvc-3 – ASP.NET MVC DropDownListFor从
