Я работаю над проектом с C # MVC, использующим Entity Framework 6.0, и у меня есть куча моделей, таких как Customer, Promotion, Messages, и во всех них я довольно неэффективен с повторяющейся логикой обработки ошибок.Например, вот как я сохраняю новые записи клиентов.
Обратите внимание на проверку ошибок длины!
public class CustomerRepository : IRepository<Customer>
{
private MyDBEntities db = new MyDBEntities();
public uniqueIdentifier AddRecord (Customer record) {
record.PromotionStatus = CheckForPromo(record);
record.LastOrderID = GetLastOrderID(record);
db.Customer.Add(record);
try {db.SaveChanges();}
catch (DbEntityValidationException e){
foreach (var err in e.EntityValidationErrors){
Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following errors", err.Entry.Entity.GetType().Name, err.Entry.State);
foreach (var innerErr in err.ValidationErrors){
Console.WriteLine("--Property of \"{0}\" has error \"{1}\"" , innerErr.PropertyName, innerErr.ErrorMessage);
}
}
}
return record.id;
}//end of AddRecord
}
У меня есть несколько разных классов, смоделированных в EF и в моих таблицах, например:
Каждый из них имеет очень похожий блок сохранения, похожий на этот:
db.Customer.Add(record);
try {db.SaveChanges();}
catch (DbEntityValidationException e){
foreach (var err in e.EntityValidationErrors){
Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following errors", err.Entry.Entity.GetType().Name, err.Entry.State);
foreach (var innerErr in err.ValidationErrors){
Console.WriteLine("--Property of \"{0}\" has error \"{1}\"" , innerErr.PropertyName, innerErr.ErrorMessage);
}
}
}
Единственное, что отличается между ними, это то, является ли он db.Customer.Add(record);
или db.Promotion.Add(record);
илискоро.
Я думал, что смогу добавить новый метод в репо, например,
private void TrySaveRecord(string recordType, object record){
db.recordType.Add(record);
try {db.SaveChanges();}
catch (DbEntityValidationException e){
foreach (var err in e.EntityValidationErrors){
Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following errors", err.Entry.Entity.GetType().Name, err.Entry.State);
foreach (var innerErr in err.ValidationErrors){
Console.WriteLine("--Property of \"{0}\" has error \"{1}\"" , innerErr.PropertyName, innerErr.ErrorMessage);
}
}
}
}
Но я столкнулся с проблемой MyDbEntities does not contain a definition for 'recordType'
.С тех пор я крутился вокруг водоворота депрессии, кажется, что это, вероятно, выполнимо, но я не знаю словаря для этой области, чтобы понять, как описать то, что я пытаюсь сделать.
Спасибо за любые указатели:)