【发布时间】:2012-03-06 00:08:04
【问题描述】:
我想知道创建一个静态类来获取实体数据库上下文是否是一个好习惯。
ThisGetEntity() 返回上下文。在GetEntity 方法中,我有一个动态连接。
当有人访问我的登录页面时,他们需要提供一个数据库号 + 用户名 + 密码。我将 dbname 存入 Session["DBName"]。
public static class EntityFactory
{
public static DBEntities GetEntity()
{
var scsb = new SqlConnectionStringBuilder();
scsb.DataSource = ConfigurationManager.AppSettings["DataSource"];
scsb.InitialCatalog = "db1";
scsb.MultipleActiveResultSets = true;
scsb.IntegratedSecurity = true;
if (HttpContext.Current.Session["DBName"] == null)
{
HttpContext.Current.Response.Redirect("/Account/Step1");
}
else
{
scsb.InitialCatalog = HttpContext.Current.Session["DBName"].ToString();
}
var builder = new EntityConnectionStringBuilder();
builder.Metadata = "res://*/nms.bin.Models.DBModel.csdl|res://*/nms.bin.Models.DBModel.ssdl|res://*/nms.bin.Models.DBModel.msl";
builder.Provider = "System.Data.SqlClient";
builder.ProviderConnectionString = scsb.ConnectionString;
DBEntities db = new DBEntities(builder.ConnectionString);
return db;
}
当我想在控制器中通过示例获取 DBContext 时,我只需要执行 EntityFactory.GetEntity() 并返回一个 DB 上下文。
- 我这样做的方式是否正确
- 如果 20 个客户端同时登录但使用不同的 dbname,这可能是个问题。
- 目前,我没有使用任何 dispose,有问题吗?根据我的
EntityFactory课程,我可以在该课程中制作一个将自动调用的全局一次性用品。 (我想到了 descutor 方法)。
【问题讨论】:
-
@Eranga 非常感谢您的编辑,我的英语不好:)
标签: c# asp.net-mvc-2 entity-framework-4