我试着做这个官方教程:
http://docs.asp.net/en/latest/tutorials/your-first-aspnet-application.html
在运行应用程序时,我可以创建作者。但是,如果我尝试创建Books,则会在BooksController.cs(从Scaffolded Item生成)中抛出异常。
_context.SaveChanges()
当调试器遇到上述代码中的\"FK_Book_Author_AuthorID\"
行时,我收到以下异常消息:
INSERT语句与FOREIGN KEY约束
using System.Collections.Generic; using System.ComponentModel.DataAnnotations; namespace ContosoBooks.Models { public class Author { public int AuthorID { get; set; } [Required] [Display(Name = "Last Name")] public string LastName { get; set; } [Display(Name = "First Name")] public string FirstMidName { get; set; } public virtual ICollection<Book> Books { get; set; } } }
冲突。 冲突发生在数据库\&#34; aspnet5-ContosoBooks-6c8514e9-1385-411c-bc72-2620ec2f43ec \&#34;,table \&#34; dbo.Author \&#34;,column&#39; AuthorID& #39;&#34;}
我新创作的书似乎有问题。此项目没有Authors表的AuthorID外键。
这只是为了我,还是我做错了什么?如何在我刚刚提到的示例中修复此外键异常?
现在我的Author.cs看起来像这样
@model ContosoBooks.Models.Book
@{
ViewData["Title"] = "Create";
}
<h2>Create</h2>
<form asp-action="Create">
<div class="form-horizontal">
<h4>Book</h4>
<hr />
<div asp-validation-summary="ValidationSummary.ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="AuthorID" class="col-md-2 control-label"></label>
<div class="col-md-10">
<select asp-for="AuthorID" class ="form-control"></select>
</div>
</div>
<div class="form-group">
<label asp-for="Genre" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Genre" class="form-control" />
<span asp-validation-for="Genre" class="text-danger" />
</div>
</div>
<div class="form-group">
<label asp-for="Price" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Price" class="form-control" />
<span asp-validation-for="Price" class="text-danger" />
</div>
</div>
<div class="form-group">
<label asp-for="Title" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Title" class="form-control" />
<span asp-validation-for="Title" class="text-danger" />
</div>
</div>
<div class="form-group">
<label asp-for="Year" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Year" class="form-control" />
<span asp-validation-for="Year" class="text-danger" />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
</form>
<div>
<a asp-action="Index">Back to List</a>
</div>
@section Scripts {
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
}
我对创作书的看法
record.twig
答案 0 :(得分:1)
您的问题是,您未给Book book
参数AuthorID
。根据您正在查看的示例,Book模型在Book模型中的[ScaffoldColumn(false)]
上方public int AuthorID
。这意味着当您使用generated from Scaffolded Item
方法时,此字段将不会创建输入。删除[ScaffoldColumn(false)]
并重新生成图书的控制器/视图..或者只是手动将字段添加到图书视图中。
如果您正在尝试学习MVC,可能需要尝试本教程http://pluralsight.com/training/Player?author=scott-allen&name=mvc4-building-m6-ajax&mode=live&clip=0&course=mvc4-building
答案 1 :(得分:0)
您的图书模型与模型作者有关系,因为我正在查看您引用的链接,图书模型具有AuthorId。
您需要在保存时提供AuthorId来预订模型,或者您需要首先保存作者,然后获取保存的AuthorId并在Book模型中设置。 (按照你的模特,一本书必须有一个作者)。