2

我正在使用 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 不这样做?

4

1 回答 1

1

坚果,我只是在wiki的帮助下才弄明白的。解决方案似乎是扩展UnflatLoopValueInjection

public class NullStringUnflatLoopValueInjection : UnflatLoopValueInjection<string, string>
{
    protected override string SetValue(string sourceValue)
    {
        return sourceValue ?? string.Empty;
    }
}
于 2012-05-08T17:16:25.407 回答