gpt4 book ai didi

sql - 更新语句与 ASP.NET MVC4 中的 FOREIGN KEY 约束冲突

转载 作者:行者123 更新时间:2023-12-04 23:51:19 24 4
gpt4 key购买 nike

我实际上正在开发一个 ASP.NET MVC4 应用程序,我们在其中使用了 Entity Framework 和模型- View - View -模型方法和 7 层架构。我们有一页需要插入或更新“产品”信息。插入或更新的产品数据将保存在“产品”表中。我的数据库名称是“DbOnix”。
产品表的基本结构如下:

 Column Name               Data Type      Allow Nulls
ProductID PK int
ProductName varchar(255) NO
ProductCategoryID FK int
Sequence int YES
ActiveStatus int YES
SlNo int NO

Product 表中的 ProductCategoryID 列与 ProductCategory 表具有外键关系。 ProductCategory表的基本结构:
    Column Name                Data Type          Allow Nulls
ProductCategoryID PK int
ProductCategoryName varchar(150) NO

每当我尝试在 Product 表中插入或更新数据时,都会引发以下异常:
The UPDATE statement conflicted with the FOREIGN KEY constraint   "FK_Product_ProductCategory". The conflict occurred in database "DbOnix", table "dbo.ProductCategory", column 'ProductCategoryID'.The statement has been terminated.

我的 Controller 代码:
    public HttpStatusCodeResult UpdateProductInformation(int id, ProductDTO ProductDTO)
{
_productManager.UpdateProductInformation(id, ProductDTO);
return new HttpStatusCodeResult(HttpStatusCode.OK);
}

我的经理类(class)代码:
    public void UpdateProductInformation(int id, ProductDTO productDTO)
{
//if productDTO data is not valid
if (productDTO == null)
throw new ArgumentException(Messages.warning_CannotAddProfileWithNullInformation);

//Create a new product entity
var currentProduct = _ProductRepository.Get(id);

var updatedProduct = new Product();
updatedProduct.ProductID = id;
updatedProduct.ProductName = productDTO.ProductName;
updatedProduct.ProductCategoryID = productDTO.ProductCategoryID;
updatedProduct.Sequence = productDTO.Sequence;
updatedProduct.ActiveStatus = productDTO.ActiveStatus;
updatedProduct.SlNo = productDTO.SlNo;

//Update Product
updatedProduct = this.UpdateProduct(currentProduct, updatedProduct);

}

我的核心(属性(property))类代码:
public partial class Product : Entity, IValidatableObject
{


public Product()
{

}


[Key]
public int ProductID { get; set; }
public string ProductName { get; set; }
public int ProductCategoryID { get; set; }
public int Sequence { get; set; }
public int ActiveStatus { get; set; }
public int SlNo { get; set; }
}

和我的 DTO 类代码:
public class ProductDTO
{
public int ProductID { get; set; }
public string ProductName { get; set; }
public int ProductCategoryID { get; set; }
public int Sequence { get; set; }
public int ActiveStatus { get; set; }
public int SlNo { get; set; }
}

请注意,我的数据库服务器是 MS SQL Server 2008 R2。

EDIT-1:我忘了包括我的 Javascript 代码:
$(function () {



var Product = function (Product) {
var self = this;
self.ProductID = ko.observable(Product ? Product.ProductID : 0).extend({ required: true });
self.ProductName = ko.observable(Product ? Product.ProductName : '').extend({ required: true });
self.ActiveStatus = ko.observable(Product ? Product.ActiveStatus : 0);

};

var ProductCollection = function () {
var self = this;

//if ProfileId is 0, It means Create new Profile
if (ProductID == 0) {
self.Product = ko.observable(new Product());
}
else {
$.ajax({
url: urlProduct + '/GetProductById/' + ProductID,
async: false,
dataType: 'json',
success: function (json) {
self.Product = ko.observable(new Product(json));
}
});
}

self.ProductErrors = ko.validation.group(self.Product());





self.saveProduct = function () {
var isValid = true;

if (self.ProductErrors().length != 0) {
self.ProductErrors.showAllMessages();
isValid = false;
}



if (isValid) {

self.Product().ActiveStatus = document.getElementById("stat").value;

$.ajax({
type: (ProductID > 0 ? 'PUT' : 'POST'),
cache: false,
dataType: 'json',
url: urlProduct + (ProductID > 0 ? '/UpdateProductInformation?id=' + ProductID : '/SaveProductInformation'),
data: JSON.stringify(ko.toJS(self.Product())),
contentType: 'application/json; charset=utf-8',
async: false,
success: function (data) {
alert("Product saved successfully.");
window.location.href = '/Product';
},
error: function (err) {
var err = JSON.parse(err.responseText);
var errors = "";
for (var key in err) {
if (err.hasOwnProperty(key)) {
errors += key.replace("Product.", "") + " : " + err[key];
}
}
$("<div></div>").html(errors).dialog({ modal: true, title: JSON.parse(err.responseText).Message, buttons: { "Ok": function () { $(this).dialog("close"); } } }).show();
},
complete: function () {
}
});
}
};
};


var ProductsViewModel = function () {
var self = this;
var url = "/Product/GetAllProduct";
var refresh = function () {
$.getJSON(url, {}, function (data) {
self.Products(data);
});
};

// Public data properties
self.Products = ko.observableArray([]);

// Public operations
self.createProduct = function () {
window.location.href = '/Product/ProductCreateEdit/0';
};

self.editProduct = function (product) {
//alert(product.ProductID);
window.location.href = '/Product/ProductCreateEdit/' + product.ProductID;
};

};

ko.applyBindings(new ProductsViewModel(), document.getElementById("productlist"));
ko.applyBindings(new ProductCollection(), document.getElementById("product_edit"));
});

请注意,我使用了 KnockoutJS v2.3.0

最佳答案

在您的代码中..

updatedProduct.ProductCategoryID = productDTO.ProductCategoryID;

您可能正在分配一个值 (ProductCategoryID),而该值在 中不存在。产品分类 table 。所以请检查您是否从数据库中获得了正确的 ProductCategories(检查 productDTO )。问题可能是您的 ProductCategoryID 的值为 0 .
这就是为什么它说 UPDATE statement conflicted with the FOREIGN KEY constraint

关于sql - 更新语句与 ASP.NET MVC4 中的 FOREIGN KEY 约束冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21422566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com