gpt4 book ai didi

c# - 具有数据库连接的 IIS Web 应用程序

转载 作者:太空宇宙 更新时间:2023-11-03 10:55:01 26 4
gpt4 key购买 nike

我正在开发一个使用 Entity Framework 的 Web 应用程序,SaveChanges 方法已被覆盖以允许记录对数据库所做更改的条目。

现在 MSDN它声明数据库上下文不是线程安全的。所以我有 2 个问题。

1) 如果我想在一个线程中创建日志条目,我是否必须为每个线程使用一个新的数据库上下文?

using (var repository = new LoggingRepository(new LoggingDbContext()))
{
((ILoggingRepository)repository).Persist(auditEntries);
}

更新:日志数据库是一个独立于SaveChanges被覆盖的数据库

2) 应用程序是否为通过 IIS 连接到应用程序的每个用户创建一个新的数据库上下文?

最佳答案

If I want to create the log entries in a thread do I have to use a new DB Context for each thread?

是的,您必须在每个线程中使用新上下文。这不是因为记录器,而是因为上下文本身。记录器通常是线程安全的(取决于您使用的是什么),因此您可以将记录器的相同实例传递到不同的上下文。

请记住,这是您需要使用线程 ID 的时候,因为许多线程将写入相同的日志输出。日志条目将没有顺序。例如,您可以在日志文件中看到事务中断,这并不表示有问题。这就是写入日志文件的方式。

Does the application create a new DB Context for each user that connects to the application through IIS?

在大多数情况下,这是正确的方法。此外,您不仅应该为每个用户构建新的数据库上下文,还应该为每个新请求构建新的数据库上下文。 DB Context 使用连接池,它保留物理连接并在处置托管连接对象时销毁逻辑连接。

数据库上下文被设计成一个轻量级对象。

关于c# - 具有数据库连接的 IIS Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19859485/

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