При обновлении записей возникла ошибка дополнительные сведения приведены во внутреннем исключении

Всем привет, 3 вопроса:

1.такая проблема. EF последняя версия. Visual Studio. Создал простую базу данных. Создал модель. Создал таблицу. Через код добавляю в таблицу данные. Одну строчку он добавляет. Но вот как впишу еще одну например с названием «bu2» то уже ошибка на моменте db.SaveChanges();

System.Data.Entity.Infrastructure.DbUpdateException: «При обновлении записей возникла ошибка. Дополнительные сведения приведены во внутреннем исключении.»

SqlException: Violation of PRIMARY KEY constraint ‘PK__Buffet__3214EC070BE69470’. Cannot insert duplicate key in object ‘dbo.Buffet’. The duplicate key value is (0).
The statement has been terminated.

2.Даже когда на одной строке срабатывает, я открываю таблицу, там нету записанных данных, получается что база данных ничего не записывает?

3.Почему в db. я уже нахожу свою таблицу во множественном числе с буквой s на конце?

class Program
{
    static void Main(string[] args)
    {
        Database1Entities db = new Database1Entities();

        var query = from t in db.Buffets select t;



        Buffet bu1 = new Buffet { MarketCap = 651616556, Index = "fesfs", 
        TotalDebt = 56156 };

        db.Buffets.Add(bu1);

        db.SaveChanges();

        foreach (var item in query)
        {
            Console.WriteLine(item.MarketCap);
        }

        Console.ReadKey();
    }
}

Вот так решается проблема, не хочет автоматом Id прописывать, но второй
вопрос остается все еще открытым.

static void Main(string[] args)
{
    using (Database1Entities db1 = new Database1Entities())
    {
        Buffet bu1 = new Buffet { Id = 0, MarketCap = 651616556, Index = 
       "SP500", TotalDebt = 79994};
        Buffet bu2 = new Buffet { Id = 1, MarketCap = 657145, Index = 
       "Dow30", TotalDebt = 582166 };
        Buffet bu3 = new Buffet { Id = 2, MarketCap = 157212, Index = 
         "NASDAQ", TotalDebt = 1298974 };
        db1.Buffets.Add(bu1);
        db1.Buffets.Add(bu2);
        db1.Buffets.Add(bu3);

        db1.SaveChanges();

        var query = from t in db1.Buffets select t;

        foreach (var item in query)
        {
            Console.WriteLine(item.MarketCap);
            Console.WriteLine(item.TotalDebt);
        }
    }
    Console.ReadKey();
}

покажите как у вас объявлен Buffet.

PashaPash Если вы вот это имеете ввиду, то вот так:

 public virtual DbSet<Buffet> Buffets { get; set; }

Автоматом при создание модели генерирует.

что проверяете именно в той базе?

Захожу в таблицу Buffet, а там всюду null, после отладки не сохраняются данные.

как именно у вас база подключена?

Она подключена обычно:) не знаю как точно ответить. Создал простую базу в VS, создал модель. На ней зеленая розетка, но при запуске отладки загорается крестик красные, может она просто отключается на отладку. Нашел тут на форму ответ, что нужно поставить if newer в свойствах базы данных. Я та понял это в свойствах базы данных, у меня рус. версия. Как я понял это связано с «Копировать в выходной каталог», но переключая там на разные вкладки снова ошибка на SaveChages().

been looking around and i just cant seem to figure out what is wrong.

Currently i’m trying to update my database with a new highscore when ever the player dies. But it keeps throwing that exception at me, no matter what i choose to try and save.

Code:

 HighScore hs = new HighScore();
            var id = from i in db.HighScores
                     orderby i.ID descending
                     select i;
            int newId = 0;

            if (id.Count() == 0)
            {
                newId = 1;
            }
            else
            {
                newId = id.First().ID + 1;
            }
        hs.ID = 6; //I just hardcoded in 6 to make sure i wasent because of the newId      //thing, and i have checked if theres already something on the sixths spot as well.
            hs.UserHighscore = 100;
            hs.HighscoreUsername = "test";
            hs.GameID = 1;
            db.HighScores.AddObject(hs);
            db.SaveChanges();

I’ve checked, again and again, and i just cant seem to figure out what the problem is.

Any help would be appriciated.

The exception:

System.Data.UpdateException was unhandled
  Message=An error occurred while updating the entries. See the inner exception for details.
  Source=System.Data.Entity
  StackTrace:
       at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
       at System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache)
       at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options)
       at System.Data.Objects.ObjectContext.SaveChanges()
       at MatematikSpilMenu.SaveBunniesSceen.SaveHighscore() in MatematikSpilMenuSaveBunniesSceen.cs:line 173
       at MatematikSpilMenu.SaveBunniesSceen.Update(GameTime gameTime, Boolean otherScreenIsActive, Boolean coveredByOtherScreens) in C:UsersEtarnalazure-Aliendocumentsvisual studio 2010ProjectsMatematikSpilMenuMatematikSpilMenuMatematikSpilMenuSaveBunniesSceen.cs:line 110
       at MatematikSpilMenu.ScreenManager.Update(GameTime gameTime) in MatematikSpilMenuScreenManager.cs:line 101
       at Microsoft.Xna.Framework.Game.Update(GameTime gameTime)
       at Microsoft.Xna.Framework.Game.Tick()
       at Microsoft.Xna.Framework.Game.HostIdle(Object sender, EventArgs e)
       at Microsoft.Xna.Framework.GameHost.OnIdle()
       at Microsoft.Xna.Framework.WindowsGameHost.RunOneFrame()
       at Microsoft.Xna.Framework.WindowsGameHost.ApplicationIdle(Object sender, EventArgs e)
       at System.Windows.Forms.Application.ThreadContext.System.Windows.Forms.UnsafeNativeMethods.IMsoComponent.FDoIdle(Int32 grfidlef)
       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.Run(Form mainForm)
       at Microsoft.Xna.Framework.WindowsGameHost.Run()
       at Microsoft.Xna.Framework.Game.RunGame(Boolean useBlockingRun)
       at Microsoft.Xna.Framework.Game.Run()
       at MatematikSpilMenu.Program.Main() in MatematikSpilMenuGame1.cs:line 120
  InnerException: System.Data.EntityCommandCompilationException
       Message=An error occurred while preparing the command definition. See the inner exception for details.
       Source=System.Data.Entity
       StackTrace:
            at System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree commandTree)
            at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.CreateCommand(UpdateTranslator translator, Dictionary`2 identifierValues)
            at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues)
            at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
       InnerException: System.NotSupportedException
            Message=Server-generated keys and server-generated values are not supported by SQL Server Compact.
            Source=System.Data.SqlServerCe.Entity
            StackTrace:
                 at System.Data.SqlServerCe.SqlGen.DmlSqlGenerator.GenerateReturningSql(StringBuilder commandText, DbModificationCommandTree tree, ExpressionTranslator translator, DbExpression returning)
                 at System.Data.SqlServerCe.SqlGen.DmlSqlGenerator.GenerateInsertSql(DbInsertCommandTree tree, List`1& parameters, Boolean isLocalProvider)
                 at System.Data.SqlServerCe.SqlGen.SqlGenerator.GenerateSql(DbCommandTree tree, List`1& parameters, CommandType& commandType, Boolean isLocalProvider)
                 at System.Data.SqlServerCe.SqlCeProviderServices.CreateCommand(DbProviderManifest providerManifest, DbCommandTree commandTree)
                 at System.Data.SqlServerCe.SqlCeProviderServices.CreateDbCommandDefinition(DbProviderManifest providerManifest, DbCommandTree commandTree)
                 at System.Data.Common.DbProviderServices.CreateCommandDefinition(DbCommandTree commandTree)
                 at System.Data.Common.DbProviderServices.CreateCommand(DbCommandTree commandTree)
                 at System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree commandTree)
            InnerException: 

Casper-SC

Эксперт .NET

4430 / 2090 / 404

Регистрация: 27.03.2010

Сообщений: 5,657

Записей в блоге: 1

1

20.04.2014, 01:24. Показов 9410. Ответов 5

Метки code first, entity, update (Все метки)


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsApp_EF_CodeFirst
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var context = new CustomerAndOrderEntities())
            {
                var customer = new Customer { Name = "Алексей" };
                context.Customers.Add(customer);
                context.Orders.Add(new Order { Customer = customer });
                context.SaveChanges();
 
                var queryCustomers = from result in context.Customers
                            select result;
 
                foreach (Customer currentCustomer in queryCustomers)
                {
                    Console.WriteLine("Id = {0,4}; Имя: {1};",
                        currentCustomer.CustomerId, currentCustomer.Name);
                }
 
                var queryOrders = from result in context.Orders
                                     select result;
 
                foreach (Order order in queryOrders)
                {
                    Console.WriteLine("Id = {0,4}; Имя заказчика: {1}; Дата: {2}",
                        order.CustomerId, order.Customer.Name, order.OrderDate);
                }
            }
        }
    }
}
C#
1
2
3
4
5
6
    class CustomerAndOrderEntities : DbContext
    {
        public DbSet<Customer> Customers { get; set; }
 
        public DbSet<Order> Orders { get; set; }
    }
C#
1
2
3
4
5
6
7
8
9
10
    class Order
    {
        public int OrderId { get; set; }
        
        public DateTime OrderDate { get; set; }
 
        public int CustomerId { get; set; }
 
        public Customer Customer { get; set; }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
    class Customer
    {
        public Customer()
        {
            Orders = new HashSet<Order>();
        }
 
        public int CustomerId { get; set; }
 
        public string Name { get; set; }
 
        public HashSet<Order> Orders { get; set; }
    }

Вылетает исключение на строке context.SaveChanges().

Необработанное исключение типа «System.Data.Entity.Infrastructure.DbUpdateExcepti on» в EntityFramework.dll

Дополнительные сведения: При обновлении записей возникла ошибка. Дополнительные сведения приведены во внутреннем исключении.

InnerException:

{«При обновлении записей возникла ошибка. Дополнительные сведения приведены во внутреннем исключении.»}

InnerException:

{«Преобразование типа данных datetime2 в тип данных datetime привело к выходу значения за пределы диапазона.rnВыполнение данной инструкции было прервано.»}

Добавлено через 1 минуту
Насчёт даты чего-то не понятно мне в чём там конкретно проблема

0

19 / 34 / 11

Регистрация: 09.10.2010

Сообщений: 420

27.05.2014, 10:24

2

Привет, не помнишь в чём было дело?

0

Эксперт .NET

4430 / 2090 / 404

Регистрация: 27.03.2010

Сообщений: 5,657

Записей в блоге: 1

27.05.2014, 21:41

 [ТС]

3

ai-zer, привет. Неа, я забил на EF, так как не было времени разбираться.

0

19 / 34 / 11

Регистрация: 09.10.2010

Сообщений: 420

27.05.2014, 22:04

4

Casper-SC, Ок, забыл отписаться. Проблема была в том, что поле было NotNull, а я заносил пустое значение.

0

0 / 0 / 0

Регистрация: 27.06.2015

Сообщений: 1

17.08.2016, 16:16

5

Цитата
Сообщение от Casper-SC
Посмотреть сообщение

{«Преобразование типа данных datetime2 в тип данных datetime привело к выходу значения за пределы диапазона.rnВыполнение данной инструкции было прервано.»}

Нашли решение этой проблемы?

0

lvlkoo

.NET C#,ASP.NET MVC

Эксперт .NET

592 / 503 / 225

Регистрация: 16.10.2010

Сообщений: 1,902

17.08.2016, 22:07

6

Истоки проблемы в том что начальные значения дат в C# и SQL разные.

SQL дата начинает свой отсчет от 01.01.1753, а дата в C# c 01.01.0001
То есть если вы передаете поле с неинициализированной датой, то вы по умолчанию передаете 01 января 0001 года, соостветвенно выскакивает OutOfRange…
Вы можете инициализировать вашу дату в конструкторе

C#
1
2
3
4
public MyEntity()
{
   myDateProperty = new DateTime(1,1,1753);
}

Либо вариант который я больше люблю и использую сделать все даты в сущности nullable

C#
1
public DateTime? Property {get; set;}

2

Всем привет, 3 вопроса:

1.такая проблема. EF последняя версия. Visual Studio. Создал простую базу данных. Создал модель. Создал таблицу. Через код добавляю в таблицу данные. Одну строчку он добавляет. Но вот как впишу еще одну например с названием «bu2» то уже ошибка на моменте db.SaveChanges();

System.Data.Entity.Infrastructure.DbUpdateException: «При обновлении записей возникла ошибка. Дополнительные сведения приведены во внутреннем исключении.»

SqlException: Violation of PRIMARY KEY constraint ‘PK__Buffet__3214EC070BE69470’. Cannot insert duplicate key in object ‘dbo.Buffet’. The duplicate key value is (0).
The statement has been terminated.

2.Даже когда на одной строке срабатывает, я открываю таблицу, там нету записанных данных, получается что база данных ничего не записывает?

3.Почему в db. я уже нахожу свою таблицу во множественном числе с буквой s на конце?

class Program
{
    static void Main(string[] args)
    {
        Database1Entities db = new Database1Entities();

        var query = from t in db.Buffets select t;



        Buffet bu1 = new Buffet { MarketCap = 651616556, Index = "fesfs", 
        TotalDebt = 56156 };

        db.Buffets.Add(bu1);

        db.SaveChanges();

        foreach (var item in query)
        {
            Console.WriteLine(item.MarketCap);
        }

        Console.ReadKey();
    }
}

Вот так решается проблема, не хочет автоматом Id прописывать, но второй
вопрос остается все еще открытым.

static void Main(string[] args)
{
    using (Database1Entities db1 = new Database1Entities())
    {
        Buffet bu1 = new Buffet { Id = 0, MarketCap = 651616556, Index = 
       "SP500", TotalDebt = 79994};
        Buffet bu2 = new Buffet { Id = 1, MarketCap = 657145, Index = 
       "Dow30", TotalDebt = 582166 };
        Buffet bu3 = new Buffet { Id = 2, MarketCap = 157212, Index = 
         "NASDAQ", TotalDebt = 1298974 };
        db1.Buffets.Add(bu1);
        db1.Buffets.Add(bu2);
        db1.Buffets.Add(bu3);

        db1.SaveChanges();

        var query = from t in db1.Buffets select t;

        foreach (var item in query)
        {
            Console.WriteLine(item.MarketCap);
            Console.WriteLine(item.TotalDebt);
        }
    }
    Console.ReadKey();
}

покажите как у вас объявлен Buffet.

PashaPash Если вы вот это имеете ввиду, то вот так:

 public virtual DbSet<Buffet> Buffets { get; set; }

Автоматом при создание модели генерирует.

что проверяете именно в той базе?

Захожу в таблицу Buffet, а там всюду null, после отладки не сохраняются данные.

как именно у вас база подключена?

Она подключена обычно:) не знаю как точно ответить. Создал простую базу в VS, создал модель. На ней зеленая розетка, но при запуске отладки загорается крестик красные, может она просто отключается на отладку. Нашел тут на форму ответ, что нужно поставить if newer в свойствах базы данных. Я та понял это в свойствах базы данных, у меня рус. версия. Как я понял это связано с «Копировать в выходной каталог», но переключая там на разные вкладки снова ошибка на SaveChages().

У меня проблема, я только начал изучать модель EF, и я остаюсь в одной точке в течение некоторого времени. Я получил такую ошибку:

» при обновлении записей произошла ошибка. См. внутреннее исключение для деталей»

Я создал простой модели, схемы, создание базы данных и написал простой код на C#, чтобы добавить только одну строку в таблице, но ошибка появляется все время.

Я публикую скриншот с диаграммой / сгенерированной DLL / простой основной / и ошибка метания

model and stuff

Ссылка для большего размера:http://i.imgur.com/bKGc4wv.png

7 ответов


повернуть Pluralization On. Проблема в том, что вы моделируете объект, используя единственное имя (Pupil) соглашение, в то время как в вашей базе данных вы используете несколько имен Pupils С s.

обновление

этой в должности показывает, как вы можете включить его или выключить.
Некоторые соответствующие выдержки из этого поста:

для включения и выключения плюрализации

  • в меню Сервис выберите Опции.

  • в диалоговом окне Параметры разверните узел базы данных.
    Примечание: выберите Показать все параметры, если узел инструменты базы данных не отображается.

  • Нажмите O/R Designer.

  • установите Плюрализацию имен в Enabled = False для установки конструктора O/R, чтобы он не изменял имена классов.

  • установите Плюрализацию имен в Enabled = True, чтобы применить правила плюрализации к именам классов объекты, добавленные в реляционный конструктор объектов.

обновление 2

но обратите внимание, что вы должны избегать множественных имен.
Вы можете читать здесь как это сделать (я приведу его здесь, на случай, если ссылка будет нарушена).

(…) при первом подходе к коду Entity Framework таблицы базы данных создаются из классов моделей. Обычно Entity Framework создает таблицы с несколькими именами. это означает, что если у вас есть класс модели PhoneNumber, Entity framework создаст таблицу для этого класса под названием «PhoneNumbers». Если вы хотите избежать множественного имени и хотите единственное имя, как клиент , вы можете сделать это так
В вашем классе DBContext переопределите метод «OnModelCreating» следующим образом (…)

enter image description here

(…) переопределение этого метода позволит избежать создания таблиц с множественными именами. Теперь он создаст Таблица называется «PhoneNumber», а не» PhoneNumbers»(…)


Это может быть причиной преобразования данных из .net в sql. например, ошибка преобразования datetime.

вообще это не точная ошибка. вы можете увидеть точную ошибку в watch at exception.Свойство innerexception.InnerException — > ResultView.

для меня это была пустая ссылка на столбец datetime


Я столкнулся с той же ошибкой:

» при обновлении записей произошла ошибка. См. внутреннее исключение
для детали»

просто удалить и заново создать *.файл edmx. Это сработало для меня. ошибка исчезнет


недавно у меня была эта проблема.
Это произошло, потому что разрешения пользовательской базы данных.
проверьте разрешения базы данных пользователя, возможно, у пользователя нет разрешения на запись в БД.


я столкнулся с той же проблемой, и не вышеперечисленные решения помогли мне. В моем Web Api 2 проект, я фактически обновил свою базу данных и разместил unique constraint на SQL table column. это действительно было причиной проблемы. Просто проверка повторяющихся значений столбцов перед вставкой помогла мне устранить проблему!


для записи у меня была эта проблема и была глупая ошибка с моей стороны. Моей проблемой было несоответствие типов данных.
Тип данных в таблице базы данных и классах C# должен быть одинаковым……


моя проблема заключалась в том, что идентификатор таблицы не является AUTO_INCREMENT, и я пытался добавить диапазон.


Необработанное исключение типа
«System.Data.Entity.Infrastructure.DbUpdateException» в
EntityFramework.dll

Дополнительные сведения: При обновлении записей возникла ошибка.
Дополнительные сведения приведены во внутреннем исключении.

Может дело в самой бд? Как посмотреть внутренние исключения?

using System.Linq;
using System.Windows;


namespace EntityLast
{

public partial class Window2 : Window
{
    StudentsandGroupEntities db;
    Student item;

    public Window2()
    {

        InitializeComponent();
    }

    public Window2(StudentsandGroupEntities db)
    {
        InitializeComponent();

        Title = "Добавление";
        this.db = db;
    }

    public Window2(Student item, StudentsandGroupEntities db)
    {
        InitializeComponent();
        db = new StudentsandGroupEntities();
        var l = db.Students.ToList();

        this.DataContext = l;
        this.comboBox.ItemsSource = db.Groups.ToList();

        Title = "Редактирование";
        this.item = item;
        this.db = db;
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        textBox.Text = item?.IDStudent.ToString();
        textBox1.Text = item?.Surname.ToString();
        textBox2.Text = item?.Name.ToString();
        textBox3.Text = item?.AddName.ToString();
        LoadComboBoxData();
    }


    public void LoadComboBoxData()
    {
        comboBox.ItemsSource = db.Groups.ToList();
        comboBox.SelectedValue = item != null ? item.IDGroup : 0;
    }

    private void button_Click(object sender, RoutedEventArgs e)
    {

            if (item != null)//редактирует
            {
                var row = db.Students.Where(s => s.IDStudent == item.IDStudent).FirstOrDefault();
                // row.IDStudent = Convert.ToInt32(textBox.Text);
                row.Surname = textBox1.Text;
                row.Name = textBox2.Text;
                row.AddName = textBox3.Text;
                row.IDGroup = int.Parse(comboBox.SelectedValue.ToString());
                db.SaveChanges();
            }
            else
            {
                var row = new Student()//добавляет
                {
                    // IDStudent = Convert.ToInt32(textBox.Text),
                    Surname = textBox1.Text,
                    Name = textBox2.Text,
                    AddName = textBox3.Text,
                    IDGroup = int.Parse(comboBox.SelectedValue.ToString())
                };
                db.Students.Add(row);
                db.SaveChanges();//ошибка здесь

            }
        }
    }
}

Дело оказалось действительно в самой бд, надо заполнять все поля в базе, которые NOT NULL, либо все менять на NULL, кроме айдишника

Ошибка объекта данных «Ошибка при обновлении записей. Подробнее см. Внутреннее исключение».

Вопрос:

Я новичок в Entity Framework, я уже искал в google для этой проблемы, но ничего не нашел. Я получаю ошибку

При обновлении записей произошла ошибка. Подробнее см. Внутреннее исключение.

и когда я проверил внутреннее исключение, я вижу это

Невозможно вставить значение NULL в столбец “DOCNUM”, таблицу “TCPIDBV2.dbo.tbl_200_Dailyreport”; столбец не допускает нулей. INSERT терпит неудачу.

Но когда я проверил записи, которые я передал для сохранения в базе данных, в этом объекте есть значение, называемое “DOCNUM”,

Это мой код:

[Table("tbl_200_Dailyreport")]
public class tbl_200_Dailyreport
{
    [Key]
    [Required]
    public long DOCNUM {get; set;}
    public DateTime DAILYREPDATE {get; set;}
    public string SECTION {get; set;}
    public string REMARKS { get; set; }
    public int? OPERATIONTIME { get; set; }
    public int? PREPARATIONTIME { get; set; }
    public int? STANDBYTIME { get; set; }
    public int? MATERIALWAITING { get; set; }
    public int? ASSISTTIME { get; set; }
    public int? MAINTENANCETIME { get; set; }
    public int? CLEANINGTIME { get; set; }
    public bool? ISOVERTIME { get; set; }
    public bool? ISLOCKED { get; set; }
    public string SHIFT { get; set; }
    public int? PRODTIME { get; set; }
    public int? BREAKTIME { get; set; }
    public double? TOTALCOLOR { get; set; }
    public double? AVERAGECOLOR { get; set; }
}

При получении значения вышеприведенного здесь приведен код:

tbl_200_Dailyreport.DOCNUM = long.Parse(txtReferenceNo.Text);
tbl_200_Dailyreport.PRODTIME = Convert.ToInt32(txtProduction.Text);
tbl_200_Dailyreport.OPERATIONTIME = Convert.ToInt32(txtOperation.Text);
tbl_200_Dailyreport.PREPARATIONTIME = Convert.ToInt32(txtPreparation.Text);
tbl_200_Dailyreport.STANDBYTIME = Convert.ToInt32(txtStandby.Text);
tbl_200_Dailyreport.MAINTENANCETIME = Convert.ToInt32(txtMaintenance.Text);
tbl_200_Dailyreport.CLEANINGTIME = Convert.ToInt32(txtCleaning.Text);
tbl_200_Dailyreport.MATERIALWAITING = Convert.ToInt32(txtMaterial.Text);
tbl_200_Dailyreport.ASSISTTIME = Convert.ToInt32(txtAssist.Text);
tbl_200_Dailyreport.BREAKTIME = Convert.ToInt32(txtOthers.Text);
tbl_200_Dailyreport.DAILYREPDATE = dtpDailyReportDate.Value;
tbl_200_Dailyreport.SHIFT = cboShift.SelectedValue.ToString();
tbl_200_Dailyreport.ISOVERTIME = cbxOvertime.Checked;
tbl_200_Dailyreport.ISLOCKED = false;
tbl_200_Dailyreport.REMARKS = txtRemarks.Text;

if (!String.IsNullOrEmpty(cboSecDepartment.Text))
{
tbl_200_Dailyreport.SECTION = cboSecDepartment.SelectedValue.ToString();
}
else
{
var section = "0";
tbl_200_Dailyreport.SECTION = section;
}

Я разрешаю всем столбцам значение null, за исключением PK, называемого “DOCNUM”, поэтому при получении значения “DOCNUM”, где txtreferenceno.Text имеет значение, равное 1. и передал его в DailyReportManager, так вот код:

public void Save(tbl_200_Dailyreport records)
{
        try
        {
            this.db.tbl_200_Dailyreport.Add(records);
            this.db.SaveChanges();
        }
        catch (Exception ex)
        {
            throw ex;
        }
}

и в получении значения txtreferenceno.Text

var max = dailyreportmanager.FindAll().Max(x => (int?)x.DOCNUM) ?? 0;
var addMax = max + 1;
txtReferenceNo.Text = Convert.ToString(addMax);

поэтому для дизайна моей базы данных

Позвольте мне опубликовать снимок экрана:

Дизайн базы данных

Когда я проверил записи, значение “DOCNUM” имеет значение, равное единице, но почему я все еще получаю эту ошибку? Пожалуйста помоги. Большое спасибо заранее.

Лучший ответ:

Чтобы указать Entity Framework, которую вы хотите вручную указать значение ключа, укажите этот атрибут:

[DatabaseGenerated(DatabaseGeneratedOption.None)]

против DOCNUM.

Поверните Pluralization On. Проблема заключается в том, что вы моделируете объект с использованием соглашения об уникальном имени (Pupil), тогда как в вашей базе данных вы используете плюрализированные имена Pupils с s.

UPDATE

Этот post показывает, как включить или выключить его.
Некоторая релевантная выдержка из этой публикации:

Включение и выключение плюрализации

    В меню «Сервис» выберите «Параметры».

    В диалоговом окне «Параметры» разверните «Инструменты базы данных».
    Примечание. Выберите «Показать все настройки», если инструменты базы данных node не отображаются.

    Нажмите O/R Designer.

    Задайте плюрализацию имен Enabled = False, чтобы установить конструктор O/R, чтобы он не менял имена классов.

    Установить плюрализацию имен на Enabled = True, чтобы применить правила плюрализации к именам классов объектов, добавленных в конструктор O/R.

ОБНОВЛЕНИЕ 2

Но обратите внимание, что вам следует избегать плюрализованных имен.
Вы можете прочитать здесь, как это сделать (я приведу его здесь, на всякий случай, когда ссылка сломается).

(…) Когда вы работаете с подходом Entity Framework Code First, вы создаете таблицы базы данных из своих классов моделей. Обычно Entity Framework создает таблицы с плюрализуемыми именами. это означает, что если у вас есть класс модели под названием PhoneNumber, инфраструктура Entity создаст таблицу для этого класса под названием «PhoneNumbers». Если вы хотите избежать плюрализованного имени и хотите иметь уникальное имя, например Customer, вы можете сделать это так
В вашем классе DBContext переопределите метод OnModelCreating, подобный этому (…)

enter image description here

(…) Наличие этого метода переопределения позволит избежать создания таблиц с плюрализованными именами. Теперь он создаст таблицу под названием «PhoneNumber», а не «PhoneNumbers» (…)

Я новичок в Entity Framework, я уже искал в Google эту проблему, но ничего не нашел. Я получаю ошибку

Произошла ошибка при обновлении записей. Подробнее см. Внутреннее исключение.

И когда я проверил внутреннее исключение, я вижу это

Невозможно вставить значение NULL в столбец «DOCNUM», таблица «TCPIDBV2.dbo.tbl_200_Dailyreport»; столбец не допускает значений NULL. INSERT не работает.

Но когда я проверил записи, которые я передал для сохранения в базе данных, в этом объекте есть значение под названием DOCNUM.

Это мой код:

[Table("tbl_200_Dailyreport")]
public class tbl_200_Dailyreport
{
    [Key]
    [Required]
    public long DOCNUM {get; set;}
    public DateTime DAILYREPDATE {get; set;}
    public string SECTION {get; set;}
    public string REMARKS { get; set; }
    public int? OPERATIONTIME { get; set; }
    public int? PREPARATIONTIME { get; set; }
    public int? STANDBYTIME { get; set; }
    public int? MATERIALWAITING { get; set; }
    public int? ASSISTTIME { get; set; }
    public int? MAINTENANCETIME { get; set; }
    public int? CLEANINGTIME { get; set; }
    public bool? ISOVERTIME { get; set; }
    public bool? ISLOCKED { get; set; }
    public string SHIFT { get; set; }
    public int? PRODTIME { get; set; }
    public int? BREAKTIME { get; set; }
    public double? TOTALCOLOR { get; set; }
    public double? AVERAGECOLOR { get; set; }
}

Чтобы получить значение из вышеперечисленных, вот код:

tbl_200_Dailyreport.DOCNUM = long.Parse(txtReferenceNo.Text);
tbl_200_Dailyreport.PRODTIME = Convert.ToInt32(txtProduction.Text);
tbl_200_Dailyreport.OPERATIONTIME = Convert.ToInt32(txtOperation.Text);
tbl_200_Dailyreport.PREPARATIONTIME = Convert.ToInt32(txtPreparation.Text);
tbl_200_Dailyreport.STANDBYTIME = Convert.ToInt32(txtStandby.Text);
tbl_200_Dailyreport.MAINTENANCETIME = Convert.ToInt32(txtMaintenance.Text);
tbl_200_Dailyreport.CLEANINGTIME = Convert.ToInt32(txtCleaning.Text);
tbl_200_Dailyreport.MATERIALWAITING = Convert.ToInt32(txtMaterial.Text);
tbl_200_Dailyreport.ASSISTTIME = Convert.ToInt32(txtAssist.Text);
tbl_200_Dailyreport.BREAKTIME = Convert.ToInt32(txtOthers.Text);
tbl_200_Dailyreport.DAILYREPDATE = dtpDailyReportDate.Value;
tbl_200_Dailyreport.SHIFT = cboShift.SelectedValue.ToString();
tbl_200_Dailyreport.ISOVERTIME = cbxOvertime.Checked;
tbl_200_Dailyreport.ISLOCKED = false;
tbl_200_Dailyreport.REMARKS = txtRemarks.Text;

if (!String.IsNullOrEmpty(cboSecDepartment.Text)) 
{
    tbl_200_Dailyreport.SECTION = cboSecDepartment.SelectedValue.ToString(); 
}
else
{
    var section = "0";
    tbl_200_Dailyreport.SECTION = section;
}

Я разрешаю обнулить все столбцы, кроме ПК, называемого ‘DOCNUM’, поэтому при получении значения ‘DOCNUM’, где txtreferenceno.Text имеет значение, равное 1. и передал его в DailyReportManager, вот код:

public void Save(tbl_200_Dailyreport records)
{
        try
        {
            this.db.tbl_200_Dailyreport.Add(records);
            this.db.SaveChanges();
        }
        catch (Exception ex)
        {
            throw ex;
        }
}

И для получения значения txtreferenceno.Text

var max = dailyreportmanager.FindAll().Max(x => (int?)x.DOCNUM) ?? 0;
var addMax = max + 1;
txtReferenceNo.Text = Convert.ToString(addMax);

Так что для дизайна моей базы данных

Разрешите опубликовать снимок экрана:

Дизайн базы данных

Когда я проверил записи, DOCNUM имеет значение, равное единице, но почему я все еще получаю эту ошибку? Пожалуйста помоги. Заранее большое спасибо.

I am using Entity Framework 5 and doing an update. I get the following exception and using the SQL Profiler I don’t see any SQL issued:

    catch (DbUpdateException ex)
    {
        return Request.CreateErrorResponse(HttpStatusCode.Conflict, ex);
    }

The message with this says:

{System.Data.Entity.Infrastructure.DbUpdateException: An error occurred while updating the entries. See the inner exception for details. ---> System.Data.UpdateException: An error occurred while updating the entries. See the inner exception for details. ---> System.Data.SqlClient.SqlException: The INSERT statement conflicted with the FOREIGN KEY constraint "FK_QuestionQuestionStatus". The conflict occurred in database "TestDb", table "dbo.QuestionStatus", column 'QuestionStatusId'.
The statement has been terminated.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
   at System.Data.SqlClient.SqlDataReader.get_MetaData()
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues)
   at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
   --- End of inner exception stack trace ---
   at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
   at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options)
   at System.Data.Entity.Internal.InternalContext.SaveChanges()
   --- End of inner exception stack trace ---
   at System.Data.Entity.Internal.InternalContext.SaveChanges()
   at System.Data.Entity.Internal.LazyInternalContext.SaveChanges()
   at System.Data.Entity.DbContext.SaveChanges()
   at TestDb.Models.Contexts.TestDbContext.SaveChanges() in c:KST134 Aug 14TestDb.ModelsContextsTestDbContext.cs:line 101
   at TestDb.Services.TestDbUowBase.Commit() in c:KST135 Aug 15TestDb.ServicesTestDbUowBase.cs:line 48
   at TestDb.Web.Controllers.ProblemController.PostProblem(Problem problem) in c:KST135 Aug 15WebUxControllersProblemController.cs:line 99}

Usually I can find a clue with the exception but in this case I cannot see anything useful in the exception listing. Does anyone have a suggestion on how I could find out more?

I am using Entity Framework 5 and doing an update. I get the following exception and using the SQL Profiler I don’t see any SQL issued:

    catch (DbUpdateException ex)
    {
        return Request.CreateErrorResponse(HttpStatusCode.Conflict, ex);
    }

The message with this says:

{System.Data.Entity.Infrastructure.DbUpdateException: An error occurred while updating the entries. See the inner exception for details. ---> System.Data.UpdateException: An error occurred while updating the entries. See the inner exception for details. ---> System.Data.SqlClient.SqlException: The INSERT statement conflicted with the FOREIGN KEY constraint "FK_QuestionQuestionStatus". The conflict occurred in database "TestDb", table "dbo.QuestionStatus", column 'QuestionStatusId'.
The statement has been terminated.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
   at System.Data.SqlClient.SqlDataReader.get_MetaData()
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues)
   at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
   --- End of inner exception stack trace ---
   at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
   at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options)
   at System.Data.Entity.Internal.InternalContext.SaveChanges()
   --- End of inner exception stack trace ---
   at System.Data.Entity.Internal.InternalContext.SaveChanges()
   at System.Data.Entity.Internal.LazyInternalContext.SaveChanges()
   at System.Data.Entity.DbContext.SaveChanges()
   at TestDb.Models.Contexts.TestDbContext.SaveChanges() in c:KST134 Aug 14TestDb.ModelsContextsTestDbContext.cs:line 101
   at TestDb.Services.TestDbUowBase.Commit() in c:KST135 Aug 15TestDb.ServicesTestDbUowBase.cs:line 48
   at TestDb.Web.Controllers.ProblemController.PostProblem(Problem problem) in c:KST135 Aug 15WebUxControllersProblemController.cs:line 99}

Usually I can find a clue with the exception but in this case I cannot see anything useful in the exception listing. Does anyone have a suggestion on how I could find out more?

Casper-SC

Эксперт .NET

4431 / 2091 / 404

Регистрация: 27.03.2010

Сообщений: 5,657

Записей в блоге: 1

1

20.04.2014, 01:24. Показов 9957. Ответов 5

Метки code first, entity, update (Все метки)


Студворк — интернет-сервис помощи студентам

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsApp_EF_CodeFirst
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var context = new CustomerAndOrderEntities())
            {
                var customer = new Customer { Name = "Алексей" };
                context.Customers.Add(customer);
                context.Orders.Add(new Order { Customer = customer });
                context.SaveChanges();
 
                var queryCustomers = from result in context.Customers
                            select result;
 
                foreach (Customer currentCustomer in queryCustomers)
                {
                    Console.WriteLine("Id = {0,4}; Имя: {1};",
                        currentCustomer.CustomerId, currentCustomer.Name);
                }
 
                var queryOrders = from result in context.Orders
                                     select result;
 
                foreach (Order order in queryOrders)
                {
                    Console.WriteLine("Id = {0,4}; Имя заказчика: {1}; Дата: {2}",
                        order.CustomerId, order.Customer.Name, order.OrderDate);
                }
            }
        }
    }
}
C#
1
2
3
4
5
6
    class CustomerAndOrderEntities : DbContext
    {
        public DbSet<Customer> Customers { get; set; }
 
        public DbSet<Order> Orders { get; set; }
    }
C#
1
2
3
4
5
6
7
8
9
10
    class Order
    {
        public int OrderId { get; set; }
        
        public DateTime OrderDate { get; set; }
 
        public int CustomerId { get; set; }
 
        public Customer Customer { get; set; }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
    class Customer
    {
        public Customer()
        {
            Orders = new HashSet<Order>();
        }
 
        public int CustomerId { get; set; }
 
        public string Name { get; set; }
 
        public HashSet<Order> Orders { get; set; }
    }

Вылетает исключение на строке context.SaveChanges().

Необработанное исключение типа «System.Data.Entity.Infrastructure.DbUpdateException» в EntityFramework.dll

Дополнительные сведения: При обновлении записей возникла ошибка. Дополнительные сведения приведены во внутреннем исключении.

InnerException:

{«При обновлении записей возникла ошибка. Дополнительные сведения приведены во внутреннем исключении.»}

InnerException:

{«Преобразование типа данных datetime2 в тип данных datetime привело к выходу значения за пределы диапазона.rnВыполнение данной инструкции было прервано.»}

Добавлено через 1 минуту
Насчёт даты чего-то не понятно мне в чём там конкретно проблема



0



19 / 34 / 11

Регистрация: 09.10.2010

Сообщений: 420

27.05.2014, 10:24

2

Привет, не помнишь в чём было дело?



0



Эксперт .NET

4431 / 2091 / 404

Регистрация: 27.03.2010

Сообщений: 5,657

Записей в блоге: 1

27.05.2014, 21:41

 [ТС]

3

ai-zer, привет. Неа, я забил на EF, так как не было времени разбираться.



0



19 / 34 / 11

Регистрация: 09.10.2010

Сообщений: 420

27.05.2014, 22:04

4

Casper-SC, Ок, забыл отписаться. Проблема была в том, что поле было NotNull, а я заносил пустое значение.



0



0 / 0 / 0

Регистрация: 27.06.2015

Сообщений: 1

17.08.2016, 16:16

5

Цитата
Сообщение от Casper-SC
Посмотреть сообщение

{«Преобразование типа данных datetime2 в тип данных datetime привело к выходу значения за пределы диапазона.rnВыполнение данной инструкции было прервано.»}

Нашли решение этой проблемы?



0



lvlkoo

.NET C#,ASP.NET MVC

Эксперт .NET

593 / 504 / 225

Регистрация: 16.10.2010

Сообщений: 1,902

17.08.2016, 22:07

6

Истоки проблемы в том что начальные значения дат в C# и SQL разные.

SQL дата начинает свой отсчет от 01.01.1753, а дата в C# c 01.01.0001
То есть если вы передаете поле с неинициализированной датой, то вы по умолчанию передаете 01 января 0001 года, соостветвенно выскакивает OutOfRange…
Вы можете инициализировать вашу дату в конструкторе

C#
1
2
3
4
public MyEntity()
{
   myDateProperty = new DateTime(1,1,1753);
}

Либо вариант который я больше люблю и использую сделать все даты в сущности nullable

C#
1
public DateTime? Property {get; set;}



2



Необработанное исключение типа
«System.Data.Entity.Infrastructure.DbUpdateException» в
EntityFramework.dll

Дополнительные сведения: При обновлении записей возникла ошибка.
Дополнительные сведения приведены во внутреннем исключении.

Может дело в самой бд? Как посмотреть внутренние исключения?

using System.Linq;
using System.Windows;


namespace EntityLast
{

public partial class Window2 : Window
{
    StudentsandGroupEntities db;
    Student item;

    public Window2()
    {

        InitializeComponent();
    }

    public Window2(StudentsandGroupEntities db)
    {
        InitializeComponent();

        Title = "Добавление";
        this.db = db;
    }

    public Window2(Student item, StudentsandGroupEntities db)
    {
        InitializeComponent();
        db = new StudentsandGroupEntities();
        var l = db.Students.ToList();

        this.DataContext = l;
        this.comboBox.ItemsSource = db.Groups.ToList();

        Title = "Редактирование";
        this.item = item;
        this.db = db;
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        textBox.Text = item?.IDStudent.ToString();
        textBox1.Text = item?.Surname.ToString();
        textBox2.Text = item?.Name.ToString();
        textBox3.Text = item?.AddName.ToString();
        LoadComboBoxData();
    }


    public void LoadComboBoxData()
    {
        comboBox.ItemsSource = db.Groups.ToList();
        comboBox.SelectedValue = item != null ? item.IDGroup : 0;
    }

    private void button_Click(object sender, RoutedEventArgs e)
    {

            if (item != null)//редактирует
            {
                var row = db.Students.Where(s => s.IDStudent == item.IDStudent).FirstOrDefault();
                // row.IDStudent = Convert.ToInt32(textBox.Text);
                row.Surname = textBox1.Text;
                row.Name = textBox2.Text;
                row.AddName = textBox3.Text;
                row.IDGroup = int.Parse(comboBox.SelectedValue.ToString());
                db.SaveChanges();
            }
            else
            {
                var row = new Student()//добавляет
                {
                    // IDStudent = Convert.ToInt32(textBox.Text),
                    Surname = textBox1.Text,
                    Name = textBox2.Text,
                    AddName = textBox3.Text,
                    IDGroup = int.Parse(comboBox.SelectedValue.ToString())
                };
                db.Students.Add(row);
                db.SaveChanges();//ошибка здесь

            }
        }
    }
}

Дело оказалось действительно в самой бд, надо заполнять все поля в базе, которые NOT NULL, либо все менять на NULL, кроме айдишника

  • При обновлении есет произошла ошибка
  • При обновлении драйверов видеокарты выдает ошибку
  • При обновлении драйверов nvidia происходит ошибка
  • При обновлении дота два произошла ошибка недопустимая конфигурация приложения
  • При обновлении дота 2 произошла ошибка файлы обновления повреждены