[英]Managing DBContext state behind a data provider interface
我有一個接口IDataProvider,它僅公開3個操作(出於討論目的):
public interface IDataProvider
{
// get a list of projects (just metadata)
List<Project> ListProjects();
// load the Project by its GUID which we got from the metadata.
Project LoadProject(Guid id);
// save the project. underlying provider should determine to insert or update accordingly.
void SaveProject(Project data);
}
我正在使用DBContext訪問SQL CE作為底層數據訪問層數據提供程序,並且可以實現:
public DataProvider : SqlCeDbContext, IDataProvider { ... }
要么
public DataProvider : IDataProvider
{
List<Project> ListProjects()
{
using(var ctx = new SqlCeContext())
{
//... manage the life of the context for the API user.
}
}
// ...
}
要么
public DataProvider : IDataProvider
{
SqlCeContext _mSqlCeContext = new SqlCeContext();
List<Project> ListProjects() { .. }
// ...
}
對於連接和實體狀態,這三種實現方式的行為當然會大不相同。 由於接口“規則”不對此執行任何規則,因此哪種實現更好? 或者,如果我們應該強制執行其中一項,可以做到嗎?
假設這是在移動設備上(由於SqlCE引用,我認為是這種情況),我認為您可能會使自己的生活變得比所需的更加復雜。
沒有理由您不能在應用程序啟動時打開連接並在應用程序的整個生命周期中保持打開狀態,因為不應有任何其他使用數據庫的應用程序。
多年來,我們一直在使用這種方法生產WinCE應用程序,並且從未遇到過任何問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.