gpt4 book ai didi

c# - 坚持尝试制作一个辅助方法来通过捕获保存数据库更改

转载 作者:行者123 更新时间:2023-11-30 22:57:30 26 4
gpt4 key购买 nike

我正在开发一个使用 Entity Framework 6.0 的 C# MVC 项目,我有一堆模型,例如客户、促销、消息,在所有这些模型中,由于重复的错误处理逻辑,我的空间效率非常低。例如,这是我保存新客户记录的方式。

注意长度错误检查!

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 和我的表中建模,如下所示:

  • 客户
  • 促销
  • 消息

他们每个人都有一个非常相似的保存 block ,如下所示:

       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);等等.

我想我可以像这样向我的 repo 添加一个新方法

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 不包含“recordType”的定义 的问题。从那以后,我一直在抑郁的漩涡中盘旋,感觉这可能是可行的,但我不知道这个领域的词汇来弄清楚如何描述我正在尝试做的事情。

感谢任何指点:)

最佳答案

有几种方法可以处理它。

最明显的是让Add在辅助方法之外,只处理 SaveChanges .

另一种方法是使您的辅助方法通用并使用 Set<T>()访问关联 DbSet 的方法:

private void TrySaveRecord<T>(T record)
where T : class
{

db.Set<T>().Add(record);
// ...

另一种方法是使用 GetType()和非通用 Set(Type)方法:

private void TrySaveRecord(object record)
{

db.Set(record.GetType()).Add(record);
// ...

或类似,但使用 Entry(object)方法和设置 StateEntityState.Added (在 EF6 中与调用 DbSet.Add 方法相同):

private void TrySaveRecord(object record)
{

db.Entry(record).State = EntityState.Added;
// ...

关于c# - 坚持尝试制作一个辅助方法来通过捕获保存数据库更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53599185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com