2014-10-12 3 views
0

Я получаю исключение во время выполнения из приведенного ниже кода. Я думаю, что это не создание первичного ключа (который является идентификатором CustomerID и int). Я использовал Wizard, и у меня есть опыт много лет назад с ADO.NET, но это мой первый проект с использованием Entity Framework 6.0 с DbContext. Я создал файл EDMX, используя сначала «базу данных», поэтому существует реальная база данных. Я не думаю любая другая таблица имеет ассоциацию внешнего ключа с этой таблицей, которая является обязательной, поэтому я думаю (но не уверен), что эта ошибка времени выполнения связана с неспособностью создать новый первичный ключ. Это либо очень простой вопрос, либо сложный вопрос, поэтому я проверю позже.Как создать новый первичный ключ в Entity Framework, сначала?

Пол

[OperationContract] 
public void DoWork() 
{ 
    try 
    { 
      using (var ctx = new MyEDMXdBExistingDatabase()) 
      { 
       CUSTOMER myCustomerREALLYNEW = new CUSTOMER(); 
       myCustomerREALLYNEW.LastName = "NeWLASTNAME"; 

       myCustomerREALLYNEW.CustomerID = 0; //set primary key to zero and let entity framework create new one automagically? I think this works based on past experience, but it's not working now 

       ctx.CUSTOMERs.Add(myCustomerREALLYNEW); 
       ctx.SaveChanges(); //PROBLEM HERE If comment out this line no runtime error 
      } 
     } 
     catch (DbEntityValidationException ex1) 
     { 
      Debug.WriteLine(ex1.Message); 
     } 
     catch (Exception ex) 
     { 
      Debug.WriteLine(ex.Message); 
     } 
     finally 
     { 
     } 
} 
+0

Какое исключения вы получаете, когда вы создаете клиент? пост. –

+0

Спасибо Мохсен Эшмаипур. Вы выигрываете бонус. В самом деле, оказывается, есть необходимое ненулевое поле, которое необходимо заполнить. Как только я это сделал, проблема исчезла. Я отредактирую свой вопрос, если этот вопрос не будет удален модератором. – PaulDecember

ответ

0

Я добавил следующий код, и он показал мне, что новый клиент не в полной manditory, непустое поле (адрес). Как только я добавил myCustomerREALLYNEW.Address = "123 Street"; то можно добавить новую запись/объект.

Вот код, который я добавил, чтобы поймать исключение во время выполнения, который я получил в сети:

catch (DbEntityValidationException ex1) 
{ 
Debug.WriteLine("!" + ex1.Message); 
List<string> errorMessages = new List<string>(); 
foreach (DbEntityValidationResult validationResult in ex1.EntityValidationErrors) 
{ 
string entityName = validationResult.Entry.Entity.GetType().Name; 
foreach (DbValidationError error in validationResult.ValidationErrors) 
{ 
errorMessages.Add(entityName + "." + error.PropertyName + ":" + errorMessages); 
} 
} 

foreach (string s in errorMessages) 
{ 
Debug.WriteLine(s); 
} 

} 
Смежные вопросы