Всем привет, 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 4430 / 2090 / 404 Регистрация: 27.03.2010 Сообщений: 5,657 Записей в блоге: 1 |
||||||||||||||||
1 |
||||||||||||||||
20.04.2014, 01:24. Показов 9410. Ответов 5 Метки code first, entity, update (Все метки)
Вылетает исключение на строке 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 |
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 |
{«Преобразование типа данных datetime2 в тип данных datetime привело к выходу значения за пределы диапазона.rnВыполнение данной инструкции было прервано.»} Нашли решение этой проблемы? 0 |
lvlkoo .NET C#,ASP.NET MVC 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
Либо вариант который я больше люблю и использую сделать все даты в сущности nullable
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 / простой основной / и ошибка метания
Ссылка для большего размера: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» следующим образом (…)
(…) переопределение этого метода позволит избежать создания таблиц с множественными именами. Теперь он создаст Таблица называется «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, подобный этому (…)
(…) Наличие этого метода переопределения позволит избежать создания таблиц с плюрализованными именами. Теперь он создаст таблицу под названием «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 4431 / 2091 / 404 Регистрация: 27.03.2010 Сообщений: 5,657 Записей в блоге: 1 |
||||||||||||||||
1 |
||||||||||||||||
20.04.2014, 01:24. Показов 9957. Ответов 5 Метки code first, entity, update (Все метки)
Вылетает исключение на строке 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 |
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 |
{«Преобразование типа данных datetime2 в тип данных datetime привело к выходу значения за пределы диапазона.rnВыполнение данной инструкции было прервано.»} Нашли решение этой проблемы?
0 |
lvlkoo .NET C#,ASP.NET MVC 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
Либо вариант который я больше люблю и использую сделать все даты в сущности nullable
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, кроме айдишника