2013-02-12 5 views
0

На работе мы стремимся перейти к ORM (по-прежнему используем базу данных доступа с ADO!) Я начал создавать структуру сущностей, и все прошло гладко, пока я не отделил ее от себя. dll (поэтому мы могли бы использовать системы веб-сайта/crm/production/barcoding, используя ту же логику базы данных).совокупные исключения с инфраструктурой сущностей в dll

Вопрос приходит обработатки DbEntityValidationExceptions, мой исходный код теста (который работал)

public override int SaveChanges(System.Data.Objects.SaveOptions options) 
     { 
      try{return base.SaveChanges(options);} 
      catch (DbEntityValidationException dbEx) 
      { 
       foreach (var validationErrors in dbEx.EntityValidationErrors) 
       { 
        foreach (var validationError in validationErrors.ValidationErrors) 
        { 
         Trace.TraceInformation("Class: {0}, Property: {1}, Error: {2}", 
          validationErrors.Entry.Entity.GetType().FullName, 
          validationError.PropertyName, 
          validationError.ErrorMessage); 
        } 
       } 
       //handle here 
       throw; 
      } 
     } 

, но это не попасться в настоящее время и я оставил обработку общий threadException. Есть ли способ получить доступ к исходным данным (отличить исключение thread?) Или есть другой подход, который я должен принять. Я думаю, мне просто нужно толчок в правильном направлении, и я могу кое-что понять.

С уважением, Пит

UPDATE:

Мда немного вопрос называя GetValidationErrors. Я заметил, что в моей базе данных Context есть baseClass ObjectContext, а не DbContext (поэтому я не могу вызвать ValidateEntity). Я использую Entity Framework 5 с включенным генератором кода по умолчанию - с использованием первого подхода к базе данных, если это помогает.

+0

Что исключение потока содержит? –

ответ

1

проверьте на наличие ошибок проверки перед вызовом SaveChanges. Что-то вроде ...

var errors = context.GetValidationErrors(); 
if(errors.Any()) 
{ 
    //handle validation errors 
} 
else 
{ 
    context.SaveChanges(); 
} 

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

+0

Хорошо спасибо за это, я попробую ваши предложения и Дженс в ближайшее время и посмотрю! –

+0

После прочтения еще нескольких - кажется, что метод ValidateEntity доступен только для DbContext. Поэтому, я думаю, я либо выясню способ получить генерацию кода по умолчанию, чтобы дать мне DbContext или придерживаться ObjectContext и написать свои собственные методы для проверки сущностей. –

+0

С помощью инструментария Entity Framework я смог переделать первый подход к базе данных и создать DbContext. Я использовал подобный метод, чтобы поймать их всех. Я отправлю заполненный код после его завершения, спасибо за вашу помощь. –

0

это то, что я в конечном итоге происходит с, в конце концов (я, вероятно, в конечном итоге конкретизации его, как я могу узнать больше о EF)

 public List<DbEntityValidationException> vErrors = new List<DbEntityValidationException>(); 
     public int DbChanges = 0;  

     public bool SaveChanges() 
     { 
      try 
      { 
       this.vErrors = (List<DbEntityValidationException>)base.GetValidationErrors(); 
       if (this.vErrors.Count == 0) 
       { 
        this.DbChanges = base.SaveChanges(); 
        return true; 
       } 
      } 
      catch (Exception Ex) 
      { 
       this.vErrors.Add(new DbEntityValidationException(string.Format("General Error: {0}", Ex.GetType().ToString()))); 
      } 
      return false; 
     } 

и из кода

using(Db db = new Db()) 
{ 
//changes 
if(db.SaveChanges) 
{ 
    //some message using db.DbChanges 
} 
else 
{ 
    //handle errors in db.vErrors 
} 
Смежные вопросы