0
我有以下代碼結構。這是通過WCF服務暴露DAL的WPF應用程序。我們已經創建了我們的域實體,並且在從EF實體填充後傳遞它們。如何在EF4.0實現中部署ObjectContext?
EDMX生成的代碼: -
public partial class EDiscDbConnection : ObjectContext
{
#region Constructors
/// <summary>
/// Initializes a new EDiscDbConnection object using the connection string found in the 'EDiscDbConnection' section of the application configuration file.
/// </summary>
public EDiscDbConnection() : base("name=EDiscDbConnection", "EDiscDbConnection")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
}
現在實例化ObjectContext中,我們創建了一個BaseDAL每DAL在應用程序從BaseDal
BaseDAL繼承: -
public class BaseDal
{
public EDiscDbConnection context; // EF Content used for connection to the Database.
/// <summary>
/// Base constructor to initilize the Entity Framework Content.
/// </summary>
public BaseDal()
{
string connstring = ConfigurationManager.ConnectionStrings["EDiscDbConnection"].ConnectionString;
//Decrypt Connection String
context = new EDiscDbConnection(Encryption.GetDecryptedString(connstring, "F045FBC3A427A1018E297BF442216C3FB3D62F51B57A33AC744B6238E05ADB08"));
//context = new EDiscDbConnection();
}
}
DAL如下: -
public partial class PatientChartDal : BaseDal
{
public List<UserFacility> GetAllFacilities()
{
List<UserFacility> userFacilities = new List<UserFacility>();
IEnumerable<Facility> userFac = from fac in context.Facilities
from usrfac in fac.UserFacilityMappings
where fac.IsActive
select fac;
if (userFac != null && userFac.Count() > 0)
{
userFacilities = new List<Domain.UserFacility>();
foreach (var u in userFac.Distinct())
{
userFacilities.Add(new Domain.UserFacility()
{
Name = u.Name,
FacilityId = u.FacilityId,
//FacilityConfiguration = GetFacilityConfiguration(u.FacilityId),
//UserConfiguration = GetFacilityUserConfiguration(u.FacilityId, userId),
Code = u.Code,
//TxAreaID = u.TxAreaID,
TimeZone = ConvertToDomainEntity(u.Seed_TimeZone)
}
);
}
}
return userFacilities;
}
}
我有一個關於這個實現
- 我們沒有處置EDiscDbConnection的以下問題。這是內存泄漏嗎?
- 在GetAllFacilities()方法中實現使用()會自動處理EDiscDbConnection還是必須在BaseDAL中實現IDisposable?
- 我很少發生錯誤「已經是一個與此命令關聯的打開的DataReader,必須先關閉」。這可能與不配置EDiscDbConnection有關。
什麼是人們在這些情況下遵循的最佳實踐。請建議。