以下附錄是我創建的一種方法的示例。
我正確實施EF6嗎?正如你在我的評論代碼中看到的,我首先嚐試創建一個存儲庫類。我相反取消了此實現的存儲庫類。
但是我現在正在收到錯誤,因爲我返回了一個IQueryable對象,然後關閉了dbcontext。試圖找到EF6的正確實施方式
所以這讓我想到了一個問題:我是否正確實施了EF6?
我可以將IQueryable更改爲返回List<obj>
,或者我可以刪除using (_myContext)
語句。
我只是想了解實現我的方法的正確方法。
public IQueryable<MY_USERS> GetAllUsers()
{
using (_myContext)
{
return _myContext.MY_USERS;
}
//MyRepository<MY_USERS> users = new MyRepository<MY_USERS>(_myContext);
//return users.GetAll();
}
更新例如:
public void DeleteUser(string userName)
{
using (var context = new MyEFConn())
{
using (var transaction = context.Database.BeginTransaction())
{
try
{
context.MY_USER_GROUPS.RemoveRange(GetUserGroups(userName));
context.MY_USERS.Remove(new MY_USERS { USER_NAME = userName });
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
throw ex;
}
}
}
}
返回'IQueryable'有很大的風險,因爲返回類型是延遲加載的,客戶端可以很容易地添加一個'Where'子句或SQL不支持的東西。從公共方法中返回列表是一般的最佳實踐。 –
使用語句對於上下文甚至是必需的嗎?它似乎讓我更加頭痛,因爲我試圖利用現有的方法,並且使用(_myContext)語句包裝了所有的方法。 – PrivateJoker
是的,你應該處理它(這是'使用')。如果處理上下文會導致問題,那意味着您仍然受限於上下文。答案是脫離上下文,而不是無限期地圍繞上下文。 –