Я использую ValueInjecter для моделирования сглаживания/unflatten в объектах домена, созданных с помощью Entity Framework (4.3.1). Все мои VARCHAR
столбцов в моей базе данных: NOT NULL DEFAULT ''
(личное предпочтение, нет желания открыть здесь священную войну). В столбце модель представления возвращается с любым строковым свойством, которое не имеет значения как null, поэтому, когда я пытаюсь вставить его обратно в класс модели домена, EF лает на меня, пытаясь установить свойство с IsNullable=false
на null. Пример (более простой):Изменение нулевых строк на string.Empty с использованием ValueInjecter
public class ThingViewModel
{
public int ThingId{get;set;}
public string Name{get;set;}
}
public class Thing
{
public global::System.Int32 ThingId
{
//omitted for brevity
}
[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
[DataMemberAttribute()]
public global::System.String Name
{
//omitted for brevity
}
}
Затем мой контроллер пост выглядит следующим образом:
[HttpPost]
public ActionResult Edit(ThingViewModel thing)
{
var dbThing = _thingRepo.GetThing(thing.ThingId);
//if thing.Name is null, this bombs
dbThing.InjectFrom<UnflatLoopValueInjection>(thing);
_thingRepo.Save();
return View(thing);
}
Я использую UnflatLoopValueInjection
потому что вложенные тип в актуальной версии домена в Thing
. Я попытался написать пользовательский ConventionInjection
, чтобы преобразовать нулевые строки в string.Empty
, но оказалось, что UnflatLoopValueInjection
переключает его обратно на нуль. Есть ли способ заставить ValueInjecter не делать этого?
Модель-первая или код-первая? Если Model-First или DB-First, вы используете пользовательский T4? Если это так или вы используете Code-First, то вы можете добавить нулевую проверку в настройках свойств. –
@ DannyVarod модель сначала, как указано в вопросе, не используя пользовательский T4. Я попытался отразить атрибуты «TargetProp» и не очень далеко продвинулся. –
некоторые люди путают два. Если вы используете генератор T4 по умолчанию, ваш объект должен иметь базовый класс. –