【发布时间】:2012-01-09 04:55:28
【问题描述】:
我首先使用实体框架代码。我有一个简单的模型:
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();
}
}
}
此代码运行良好。我遇到的问题是我认为它违反了关注点分离。我认为我的模型类不应该关注序列化字符串列表以便实体框架可以持久化它。
我在 ASP.Net MVC 中遇到了类似的问题。我有一个从客户端发送的帖子,该帖子将被映射到一个模型。与帖子相比,模型的结构方式存在一些问题。在 MVC 中,我可以编写一个自定义模型绑定器来以一种非常安全和可重用的方式处理转换。
有没有什么方法可以让实体框架像 MVC 的自定义模型绑定器一样干净?
【问题讨论】:
标签: entity-framework model mapping