gpt4 book ai didi

c# - 如何使用 try-catch block 连接到 Entity Framework ?

转载 作者:太空狗 更新时间:2023-10-29 18:25:05 26 4
gpt4 key购买 nike

我是一名新的 ASP.NET 开发人员,这是我第一次使用 Linq-to-Entities 和 Entity Framework 。我现在的问题是关于使用连接到实体或数据库的最佳实践。我知道 try-catch block 非常昂贵。但是我应该在需要连接到数据库时使用它们吗?我问这个问题是因为我有大约 20 个实体,并且在我的数据访问层中,我拥有这些实体中每一个的所有 GetData() 方法。您能就此提出建议吗?

C#代码:

public static IEnumerable<Items> getData()
{
List<Items> itemsList = new List<Items>();
try
{
using (ItemsDBEntities context = new ItemsDBEntities())
{
itemsList = (from item in context.Items
select new Items()
{
ID = item.ID,
Code = item.Code,
Name = item.Name,
StatusID = item.StatusID
}).ToList();
}
}
catch (EntityException ex)
{
//something wrong about entity
}
catch (Exception ex)
{
//Don't know what happend...
}
return itemsList;
}

最佳答案

您绝对不想在这里捕获Exception,因为您可以用您的代码掩盖其他(可能更大的)问题。

通常,如果您打算以某种方式处理它们,您应该只捕获异常。例如,在您的场景中,您可能希望在连接失败时显示一条 UI 消息。最好的方法是让异常冒泡到您实际想要处理它的层。

为了避免层之间的耦合,一个好的方法是在 DAL 中捕获特定于存储的异常并引发一个更特定于应用程序的异常,然后您可以在上层处理该异常,例如

DAL

public static IEnumerable<Items> getData()
{
List<Items> itemsList = new List<Items>();
try
{
using (ItemsDBEntities context = new ItemsDBEntities())
{
itemsList = (from item in context.Items
select new Items()
{
ID = item.ID,
Code = item.Code,
Name = item.Name,
StatusID = item.StatusID
}).ToList();
}
}
catch (EntityException ex)
{
throw new ConnectionFailedException(ex);
}
return itemsList;
}

用户界面

try
{
var items = Repo.getData();
...
}
catch (ConnectionFailedException)
{
MessageBox.Show("There was a problem accessing the database, please try again.");
}

如果您需要有关如何实现自定义异常的指导,请参阅 answer .

关于c# - 如何使用 try-catch block 连接到 Entity Framework ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20908358/

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