我正在使用Entity Framework Code First。我有一个简单的模型:
public class Variable
{
public string Name { get; set; }
public int Id { get; set; }
public IList<string> TextOptions
{
get;
set;
}
}
我遇到了一个问题,即属性TextOptions
的类型是List<String>
。
当我尝试在Entity Framework中执行此操作时,它无法映射。
我在这里(stackoverflow)找到了解决方案,可以解决我的问题。基本上,我重新构建了我的类,将列表转换为分隔字符串,然后进行持久化:
public class Variable : IVariable
{
public string Name { get; set; }
public int Id { get; set; }
public virtual IList<string> TextOptions
{
get
{
return _TextOptions;
}
set
{
_TextOptions = value;
}
}
private IList<string> _TextOptions;
public string TextOptionsSerialized
{
get
{
return String.Join(";", _TextOptions);
}
set
{
_TextOptions = value.Split(new char[]{';'}, StringSplitOptions.RemoveEmptyEntries).ToList();
}
}
}
这段代码运行良好。但我的问题是,我认为它违反了关注点分离原则。我认为我的模型类不应该关心将字符串列表序列化以便Entity Framework可以持久化。我在使用ASP.Net MVC时遇到了类似的问题。我从客户端发送了一个帖子,该帖子将映射到一个模型。由于模型的结构与帖子不符,存在一些问题。在MVC中,我可以编写自定义模型绑定器以安全且可重用地处理转换。
是否有任何方法可以为Entity Framework做到像MVC的自定义模型绑定器一样干净?
List<string>
映射到具有id
和value
的表格中,这个过程非常简单且常见,EF能否自动完成这个过程呢? - Matthijs Wessels