[英]ModelBinding throws error No parameterless constructor defined for this object
[英]Entity creation throws “No parameterless constructor defined for this object”
我正在研究基本的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會創建用於創建新項目的操作方法。 這些操作方法需要無參數的公共構造函數。
您可以在此處找到這些創建方法的一些詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.