У меня возникли проблемы с (2) полей при сохранении объектов в моем ASP.NET MVC4 приложения:Ошибка при сохранении поля с помощью специальных символов, используя EntityFramework и MVC ModelBinding
- электронной
- телефона
Как известно, эти поля будут иметь специальные символы @
и -
обычно. Вот мой код из контроллера ValueInjecter вводить свои классы модели из гидратированного объекта с помощью модели Переплет:
public ActionResult Create(TestViewModel testViewModel)
{
using (var context = new MyEntities())
{
var person = new Person();
person.InjectFrom(testViewModel);
context.Person.AddObject(person);
context.SaveChanges();
}
}
Ошибка я получаю следующие:
«Строка или двоичные данные будут усечены. заявление было прекращено»
Ok на 1-й взгляд, вы могли бы сказать, что это размер поля в SQL, но истинная проблема замаскарадены из-за этих специальных charachters. Если я ввожу следующее для полей:
телефон: 11234565454514564561
электронная почта: blahblahblahblah
... тогда все работает.
Однако, если я вхожу:
телефон: 123-456-7890
электронная почта: [email protected]
Я получаю ошибку о "String или двоичные данные будут усечен". Поэтому я нашел работу, но это кажется совершенно ненужным и, вероятно, неправильным. Если я явно сопоставить значения от модели связанного объекта в сущности, используя символы 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, проблемой Entity Framework, транзакцией на C# или ValueInjecter? Я попытался использовать аннотации для своих свойств ViewModel, чтобы диктовать типы данных, такие как Phone
и Email
, но это не остановило проблему. Это было сделано, только будучи явным в коде, избегая этих символов.
Что я делаю неправильно, потому что знаю, что поля, такие как электронная почта и телефон со специальными символами, сохраняются все время в EF с помощью MVC? Что я могу сделать, чтобы избежать необходимости посыпать эти строки кода каждый раз, когда у меня есть значение со специальным символом?
Спасибо!
_ "используя escape-символы C#" _ - нет, это только при применении '@' к [литералу строки verbatim] (http://msdn.microsoft.com/en-us/library/362314fe.aspx) ('@" C: \ Foo.bar ") или если вы хотите использовать [ключевое слово как идентификатор] (http://msdn.microsoft.com/en-us/library/x53a06bb) (' string @ string'). Хлопание символа '@' перед именем переменной ничего не делает для содержимого этой переменной. Просто запустите SQL Profiler и посмотрите, какой запрос отправлен на сервер. – CodeCaster
Что такое тип данных для электронной почты и телефона – swapneel
'<Имя свойства =" Телефон "Тип =" nvarchar "MaxLength =" 25 "/>' '<Имя свойства =" EmailAddress "Тип =" nvarchar "MaxLength =" 50 "/> ' – atconway