добавление нескольких элементов в базу данных в форме окна c # с использованием entity framewrk - PullRequest
0 голосов
/ 07 января 2019

Я хочу добавить несколько элементов в базу данных, используя структуру сущностей из 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; }

Необработанное исключение типа 'System.Data.Entity.Validation.DbEntityValidationException' произошло в EntityFramework.dll

Дополнительная информация: проверка не удалась для одного или нескольких объектов. См. Свойство EntityValidationErrors для более подробной информации.

Ответы [ 4 ]

0 голосов
/ 07 января 2019
  • Используйте этот код, и когда окно сообщений показывает использование

     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);
    
    }
    
0 голосов
/ 07 января 2019

Согласно вашему сообщению об ошибке, некоторые из ваших полей, возможно, установлены как NOT NULL в базе данных, и вы пытаетесь поставить NULL. Вы можете проверить поле EntityValidationErrors в вашем Exception в VS - там будет точная информация, какие поля являются неправильными

0 голосов
/ 07 января 2019

Сначала вы должны проверить NULL

row.Cells["Price"] is null ? DBNull.Value:Convert.ToString(row.Cells["Price"].Value)
0 голосов
/ 07 января 2019

DbNull не может быть преобразовано в Int32. Если ваше значение может быть нулевым, то ваша собственность должна быть обнуляемой.

public MyClass 
{
    public int? NullableProp {get; set;}
}

и ваш код

var saleProduct = new SaleProduct
{
     NullableProp = String.IsNullOrEmpty(txtInvoice.Text) ? (int)null :
          Convert.ToInt32(txtInvoice.Text),
     ....
}

Далее, похоже, у вас есть ModelValidationError. В этом случае вам необходимо проверить EntityValidationErrors, чтобы понять, что именно происходит с вашей моделью.

...