我正在使用 ValueInjecter 将视图模型展平/取消展平为由实体框架(4.3.1)模型优先创建的域对象。我数据库里的所有VARCHAR
专栏都是NOT NULL DEFAULT ''
(个人喜好,无意在这里开打圣战)。在发布时,视图模型返回任何没有值为 null 的字符串属性,因此当我尝试将其注入我的域模型类时,EF 对我咆哮,因为我试图将属性设置IsNullable=false
为 null。示例(过于简单):
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 不这样做?