加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 实体创建抛出“没有为此对象定义的无参数构造函

发布时间:2020-12-15 19:48:40 所属栏目:asp.Net 来源:网络整理
导读:我正在研究基本的MVC5 / EF6应用程序,并遇到以下错误: No parameterless constructor defined for this object. 当我在创建新Controller时使用由Visual Studio 2013搭建的默认创建操作和视图时会发生这种情况.我没有在这些生成的文件中调整任何内容(TestIte
我正在研究基本的MVC5 / EF6应用程序,并遇到以下错误:
No parameterless constructor defined for this object.

当我在创建新Controller时使用由Visual Studio 2013搭建的默认创建操作和视图时会发生这种情况.我没有在这些生成的文件中调整任何内容(TestItemController,Views / TestItem / Create.cshtml).我的控制器是脚手架的实体看起来像这样:

public class TestItem
{
    private Category _category;

    // Primary key
    public int TestItemId { get; set; }
    public int CategoryId { get; set; }

    public string TestColumn { get; set; }

    public virtual Category Category {
        get { return _category; }
        set { _category = value; } 
    }

    protected TestItem()
    {

    }

    public TestItem(Category category)
    {
        _category = category;
    }
}

public class Category
{
    private ICollection<TestItem> _testItems;

    // Primary key
    public int CategoryId { get; set; }

    public string Description { get; set; }

    public virtual ICollection<TestItem> TestItems
    {
        get { return _faqs; }
        set { _faqs = value; }
    }

    public Category()
    {
        _testItems = new List<TestItem>();
    }

}

我猜这是由于TestItem类让构造函数接受了一个Category对象,这就是为了保持域模型的贫乏.如果没有类别,则无法创建TestItem.但据我所知,在延迟加载等的情况下,EF应该使用受保护的无参数构造函数.

这里发生了什么,或者我做错了什么?

更新:
控制器看起来像这样(修剪):

public class TestItemsController : Controller
{
    public ActionResult Create()
    {
        return View();
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Create([Bind(Include = "TestItemId,OtherColumns")] TestItem testItem)
    {
        if (ModelState.IsValid)
        {
            db.TestItems.Add(testItem);
            await db.SaveChangesAsync();
            return RedirectToAction("Index");
        }

        return View(testItem);
    }
}

解决方法

当然,EF可以使用受保护的构造函数,但是scaffolding会创建用于创建新项目的操作方法.这些操作方法需要无参数的公共构造函数.

您可以找到这些创建方法here的一些细节.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读