Mik*_*num 23 mapping entity-framework model
我首先使用Entity Framework Code.我有一个简单的模型:
public class Variable
{
public string Name { get; set; }
public int Id { get; set; }
public IList<string> TextOptions
{
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
我遇到了属性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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码工作正常.我遇到的问题是我认为它违反了分离关注.我不认为我的模型类应该关注序列化字符串列表,以便Entity框架可以持久化它.
我在ASP.Net MVC中遇到了类似的问题.我从客户端发送了一个将映射到模型的帖子.与帖子相比,模型的结构存在一些问题.在MVC中,我可以编写自定义模型绑定器,以非常安全和可重用的方式处理转换.
是否有任何方法可以为Entity Framework执行此操作,与自定义模型绑定器适用于MVC一样干净?
Lad*_*nka 26
不,EF没有任何类型转换器或自定义类型映射器作为MVC模型绑定器的替代品.你必须总是使用一些黑客来强制持久性.另一种方法是将映射TextOptions作为相关实体的集合.它会使您更好地分离关注点,但会使您的模型复杂化并与之合作Variable.
public class Variable
{
public string Name { get; set; }
public int Id { get; set; }
public IList<TextOption> TextOptions
{
get;
set;
}
}
public class TextOption
{
public int Id { get; set; }
public string Text { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
第三种选择是使用JSON.NET进行序列化.
我使用此线程中列出的3个选项(字符串拆分序列化,JSON.NET和引入实体)为写入方案运行了一些性能测试,并发现JSON.NET产生了最佳性能.
200个相等实体的初步写入结果(请参阅此处的源代码并自行运行测试):
使用JSON序列化程序的示例:
public class VariableJson
{
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 JsonConvert.SerializeObject(_TextOptions);
}
set
{
_TextOptions = JsonConvert.DeserializeObject<IList<string>>(value);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19582 次 |
| 最近记录: |