我在ASP.NET MVC4应用程序中保存实体时遇到(2)字段的问题:
>电子邮件
>电话
如您所知,这些字段将具有特殊字符@和 – 通常.以下是来自控制器的代码,使用ValueInjecter通过模型绑定从水合对象中注入我的模型类:
public ActionResult Create(TestViewModel testViewModel)
{
using (var context = new MyEntities())
{
var person = new Person();
person.InjectFrom(testViewModel);
context.Person.AddObject(person);
context.SaveChanges();
}
}
我得到的错误如下:
“String or binary data would be truncated. The statement has been
terminated”
好的第一眼你可能会说它是SQL中字段的大小,但真正的问题是伪装,因为那些特殊的字符.如果我为字段输入以下内容:
电话:11234565454514564561
电子邮件:blahblahblahblah
……然后一切正常.
但是,如果我输入:
电话:123-456-7890
电子邮件:test@wow.com
我得到关于“字符串或二进制数据将被截断”的错误.所以我找到了解决办法,但这似乎完全没必要,可能是错误的方式.如果我使用C#转义字符将模型绑定对象的值显式映射到实体,那么我的值将如下所示插入:
public ActionResult Create(TestViewModel testViewModel)
{
using (var context = new MyEntities())
{
var person = new Person();
person.InjectFrom(testViewModel);
//Explicitly map items preserving special charachters
person.EmailAddress = @testViewModel.EmailAddress;
person.Phone = @testViewModel.Phone;
context.Person.AddObject(person);
context.SaveChanges();
}
}
好吧,老实说,我不知道罪魁祸首在哪里.这是MVC模型绑定问题,实体框架问题,C#交易还是ValueInjecter?我尝试在我的ViewModel属性上使用注释来指定数据类型,如电话和电子邮件,但这并没有阻止这个问题.只有在代码中通过转义这些字符来明确是一种方法.
我做错了什么,因为我知道电子邮件和带有特殊字符的电话等字段一直保存到EF和MVC?每当我有一个特殊字符的值时,我该怎么做才能防止必须在这些代码行中撒上?
谢谢!!
最佳答案 在典型的时尚中,我在发布了我花了3个小时试图弄明白的问题后10秒钟弄明白:
正如@CodeMaster所指出的那样,这些代码行无论如何都是不正确的.我开始玩其他一些领域,我找出了罪魁祸首.
我给出的代码简洁而简洁,但我注入了(2)不同的人:人和接触.事实证明两个表都有一个’Title’字段.我只专注于Person表中的’Title’字段,其长度为’50’,如下所示:
< Property Name =“Title”Type =“nvarchar”Nullable =“false”MaxLength =“50”/>
事实证明,Contact字段有我不知道的确切的smae字段,但只有’8’的长度如下:
< Property Name =“Title”Type =“nvarchar”MaxLength =“8”/>
这导致了错误,这确实是合法的.当我只想要一个实体并导致问题时,ValueInjecter将相同的单个’Title’值映射到两个实体.必须要小心,因为ValueInjectoer不区分名称是否匹配(因为它不应该),但这会导致我的问题.