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,C#和匿名类型 – 在手动构建匿名类型时迭代DataTab
- asp.net-mvc – 在不显眼的验证过程中使用parseJSON的语法错
- asp.net-mvc-3 – 如何在ASP .NET MVC 3中验证与另一个值相
- 仅为匿名配置ASP.NET缓存?
- asp.net – SSO表单身份验证问题.无法解密身份验证Cookie
- asp.net-mvc我在哪里放置自己的代码
- asp.net – 以编程方式在ASPX页面中设置’visible’属性的值
- asp.net – 为网站设置expire标头需要多长时间?
- ASP.NET MVC如何在一个同步方法(非async)方法中等待async
- ASP.NET C#Active Directory – 查看用户密码到期之前的时间