为什么不能在实体框架中继承模型的视图模型

Ein*_*ana 5 c# asp.net-mvc inheritance entity-framework

当我在工作中开发应用程序时,我收到一个错误:

Value cannot be null. Parameter name: input
Run Code Online (Sandbox Code Playgroud)

很多帖子在谈论这个,所以我读了它们......没有解决方案.

好继续.所以我检查了在数据库模型中是否有任何不可为空的属性试图插入而不是,所有这些属性都可以为空(除了Identity)所以这不是问题.所以我意识到抛出错误的View Model 从Model类继承的,我想:" 这可能是问题吗? ".所以我不再继承模型并重新开始工作.

请注意,这不是第一次发生这种情况,两周前我遇到了同样的情况而且是因为它.

为什么我从模型类继承?因为它有+10属性,我需要它在视图中显示这些值,但我还需要显示另一个模型类的值,所以我创建了一个视图模型:

class ViewModel: ModelClass{

    //ModelClass contains +10 properties
    //and the current class contains 7 properties

    public ModelClass CastToModelClass()
    {
        return new ModelClass{ /*stuff...*/ }// casting the current properties values to the ModelClass class
    }
}
Run Code Online (Sandbox Code Playgroud)

当我插入新铸造的模型时,我得到错误:

public JsonResult Save(ViewModel model)
{
    var modelClass = model.CastToModelClass();
    // here there are not empty properties
    context.ModelClass.Add(modelClass);
    context.SaveChanges();// error throw
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,为什么从Model类继承是错误的

Cod*_*ter 8

你的问题"为什么从Model类继承错误?" 来自错误的假设这个问题是由继承引起的.从概念上讲不建议这样做,但从技术上讲,正确编程时不应引起任何问题.

其他人已经回应了为什么使用实体框架模型作为视图模型的(部分)不是一个好主意,因此我将解决手头的技术问题.

鉴于你这样做:

var modelClass = model.CastToModelClass();
context.ModelClass.Add(modelClass);
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

CastToModelClass()返回EF模型,使您的继承问题无关紧要.问题必须出在准备和返回新ModelClass实体的代码中.

如果你这样做

var entityModel = new ModelClass
{
    Prop1 = model.Prop1,
    Prop2 = model.Prop2,
    // ...
};
context.ModelClass.Add(entityModel);
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

你基本上也是这样做的.这应该工作; 如果没有,则表示您没有正确映射所有属性.问题不在于继承.