c# - Code First 迁移和 SQL Server Management Studio 的问题

标签 c# sql-server code-first

我正在开发的应用程序的数据库出现问题。我有两个类(class) - House 和 Donation。捐赠需要有与之关联的房屋。

public class House
{
    [Key]
    public int HouseId { get; set; }

    public string AddressLine1 { get; set; }

    public string AddressLine2 { get; set; }

    public string AddressLine3 { get; set; }

}

public class Donation
{
    [Key]
    public int DonationId { get; set; }

    public string TypeOfDonation { get; set; }

    public decimal Amount { get; set; }

    [ForeignKey("Church")]
    public int ChurchId { get; set; }

    [ForeignKey("House")]
    public int HouseId { get; set; }

    public virtual House House { get; set; }
    public virtual Church Church { get; set; }

}

我已经多次使用 Code First Migrations 并且它有效,但我遇到了两个错误。我注意到的第一个是 SQL Server Studio with Donation。它为所有这些都提供了无效的列名

Donation Database Error

然后,当我运行应用程序并尝试将 Donation 与 House 相关联时,我收到此错误 INSERT 语句与 FOREIGN KEY 约束冲突 “FK_dbo.Donation_dbo.House_HouseId”。冲突发生在数据库“ChurchDatabase”、表“dbo.House”、“HouseId”列中。

这是在我的 DonationController 中创建时出现的错误:

 [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include = "DonationId,HouseId,TypeOfDonation,Amount,ChurchId")] Donation donation)
    {
        if (ModelState.IsValid)
        {
            db.Donations.Add(donation);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        ViewBag.ChurchId = new SelectList(db.Churches, "ChurchId", "Name", donation.ChurchId);
        return View(donation);
    }

有人知道发生了什么事吗?它一直在破坏我的头脑

最佳答案

找到我的问题,它在我的 View 中:

<div class="form-group">
        @Html.LabelFor(model => model.House.HouseId, "Address", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
           @Html.TextBoxFor(m => m.House.HouseId, new { id = "HouseId" })
           @Html.ValidationMessageFor(model => model.House.HouseId, "", new { @class = "text-danger" })
        </div>
    </div>

它需要是:

<div class="form-group">
        @Html.LabelFor(model => model.HouseId, "Address", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
           @Html.TextBoxFor(m => m.HouseId, new { id = "HouseId" })
           @Html.ValidationMessageFor(model => model.HouseId, "", new { @class = "text-danger" })
        </div>
    </div>

当它不需要 House 位时,我愚蠢地放下了 House.HouseId

关于c# - Code First 迁移和 SQL Server Management Studio 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49112733/

相关文章:

entity-framework - 使用 EF Code-First 模型在保存或验证之前执行逻辑

image - 使用 ASP.NET MVC 3 和 Entity Framework 4.1 Code First 在 SQL CE 4.0 中存储图像时出错

entity-framework-4 - 我可以使用Entity Framework 4 CTP5访问TPH映射中的鉴别符值吗

c# - WPF如何绑定(bind)ComboBox

c# - 如何还原对其 MDF 和 LDF 文件使用相同命名方案的多个 SQL Server 数据库

c# - 客户端的 basicHttpBinding ReceiveTimeout

sql-server - 将数据库从 SQL Server 2017 上传到 Azure SQL Server 时出错

sql-server - 如何在两列(由两个子查询生成)之间找到不同的元素?

c# - Windows Phone 7.5 横向模式下不显示自动完成框弹出窗口

c# - 如何为unicode字符串的存储过程中的参数添加前缀 'N'