Если цель состоит в том, чтобы сохранить список недавно использованных фильтров, я бы сериализовал весь объект 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, filterParams.Age, filterParams.location, . . .);
// 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, и для краткости нет обработки ошибок.