我想使用datagridview中的实体框架将多个项目添加到数据库,但是总是在SaveChanges()
方法中出错。
这是我的保存按钮代码
foreach (DataGridViewRow row in SaleGrid.Rows)
{
var saleProduct = new SaleProduct
{
SalesId = Convert.ToInt32(txtInvoice.Text),
CatId = Convert.ToInt32(row.Cells["CatId"].Value ?? DBNull.Value),
CatQuiltyId = Convert.ToInt32(row.Cells["QualityId"].Value ?? DBNull.Value),
SuitDesignId = Convert.ToInt32(row.Cells["DesignId"].Value ?? DBNull.Value),
SaleType = Convert.ToInt32(row.Cells["TypeId"].Value ?? DBNull.Value),
StockId = Convert.ToInt32(row.Cells["StockId"].Value ?? DBNull.Value),
Price = Convert.ToString(row.Cells["Price"].Value ?? DBNull.Value)
};
Db.SaleProducts.Add(saleProduct);
Db.SaveChanges();
}
public partial class SaleProduct
{
public int Id { get; set; }
public Nullable<int> SalesId { get; set; }
public Nullable<int> CatId { get; set; }
public Nullable<int> CatQuiltyId { get; set; }
public Nullable<int> SuitDesignId { get; set; }
public Nullable<int> CustomerId { get; set; }
public Nullable<int> SaleType { get; set; }
public Nullable<int> StockId { get; set; }
public string Price { get; set; }
在EntityFramework.dll中发生了类型为'System.Data.Entity.Validation.DbEntityValidationException'的未处理异常
其他信息:对一个或多个实体的验证失败。有关更多详细信息,请参见“ EntityValidationErrors”属性。
答案 0 :(得分:0)
DbNull无法转换为Int32。如果您的值可以为null,则您的媒体资源必须为空。
public MyClass
{
public int? NullableProp {get; set;}
}
和您的代码
var saleProduct = new SaleProduct
{
NullableProp = String.IsNullOrEmpty(txtInvoice.Text) ? (int)null :
Convert.ToInt32(txtInvoice.Text),
....
}
富特莫尔,看来您有ModelValidationError。在这种情况下,您需要检查EntityValidationErrors
以了解您的模型到底出了什么问题。
答案 1 :(得分:0)
根据您的错误消息,似乎您的某些字段可能已在数据库中设置为NOT NULL,并且您尝试将NULL放入。您可以在VS中的“异常”中检查EntityValidationErrors字段-确切的信息是哪些字段不正确
答案 2 :(得分:0)
您必须先检查null
row.Cells["Price"] is null ? DBNull.Value:Convert.ToString(row.Cells["Price"].Value)
答案 3 :(得分:-1)
使用此代码以及显示消息框时使用
ctrl + c
要复制邮件
然后在此处发布
try {
foreach (DataGridViewRow row in SaleGrid.Rows)
{
var saleProduct = new SaleProduct
{
SalesId = Convert.ToInt32(txtInvoice.Text),
CatId = Convert.ToInt32(row.Cells["CatId"].Value ?? DBNull.Value),
CatQuiltyId = Convert.ToInt32(row.Cells["QualityId"].Value ?? DBNull.Value),
SuitDesignId = Convert.ToInt32(row.Cells["DesignId"].Value ?? DBNull.Value),
SaleType = Convert.ToInt32(row.Cells["TypeId"].Value ?? DBNull.Value),
StockId = Convert.ToInt32(row.Cells["StockId"].Value ?? DBNull.Value),
Price = Convert.ToString(row.Cells["Price"].Value ?? DBNull.Value)
};
Db.SaleProducts.Add(saleProduct);
Db.SaveChanges();
}
}
catch (Exception e)
{
var messages = new List<string>();
do
{
messages.Add(e.Message);
e = e.InnerException;
}
while (e != null) ;
var message = string.Join(" - ", messages);
MessageBox.Show(message);
}