我有这么长的头衔,希望能够吸引更广泛的观众,因为我不确定如何继续。我正在尝试使用工作单元和存储库模式编写一个通用存储库来执行存储过程。
我的解决方案中有4个项目
用于控制poco的商业实体以映射我的实体(关注点分离)
商业服务这些包含我的界面和服务合同
public interface ItblAnswerServices
{
tblAnswerEntity GettblAnswerByID(int tblAnswerID);
IEnumerable<tblAnswerEntity> GetAlltblAnswers();
int CreatetblAnswer(tblAnswerEntity tblAnswer);
bool UpdatetblAnswer(int tblAnswerid, tblAnswerEntity tblAnswer);
bool DeletetblAnswer(int tblAnswerid);
}
/// <summary>
/// Updates a tblAnswer
/// </summary>
/// <param name="tblAnswerId"></param>
/// <param name="tblAnswerEntity"></param>
/// <returns></returns>
public bool UpdatetblAnswer(int tblAnswerID, BusinessEntites.tblAnswerEntity tblAnswerEntity)
{
var success = false;
if (tblAnswerEntity != null)
{
using (var scope = new TransactionScope())
{
var tblAnswer = _unitOfWork.tblAnswerRepository.GetByID(tblAnswerID);
if (tblAnswer != null)
{
tblAnswer.QuestionID = tblAnswerEntity.QuestionID;
tblAnswer.AnswerText = tblAnswerEntity.AnswerText;
tblAnswer.Correct = tblAnswerEntity.Correct;
_unitOfWork.tblAnswerRepository.Update(tblAnswer);
_unitOfWork.Save();
scope.Complete();
success = true;
}
}
}
return success;
}
DataAccess这包含我的通用存储库以及我的工作单元和我的EF6数据库实体模型连接(.edmx文件)
在我的通用存储库中我试图使用
public IEnumerable<T> ExecWithStoreProcedure<T>(string query)
{
return Context.Database.SqlQuery<T>(query);
}
我不想列出我的所有存储过程(有很多),但如果我必须在UnitOfWork中,我会。我可以在这里使用通用方法吗?我的EF模型实际上确实要调用其中的所有SP。我需要通过HTTP动词调用我的Web API。
答案 0 :(得分:0)
我不确定这个问题的问题是什么,但我会给你一些一般的建议:
T4
模板魔术(文本模板转换工具)加快这项工作。阅读更多相关信息here。
在这种情况下,您必须访问当前 DbContext
实例并在该连接上执行存储过程。强烈建议使用SlqCommand
或DbCommand
! TransactionScope
从交易的角度来涵盖所有方案。你没有更多关于这个话题的内容。在某些高级方案中,您必须启用MARS(多个活动结果集)和MSDTC服务。这是来自SO的discussion。如果您提供更多详细信息或澄清问题,我可以为您提供更具体的帮助/答案。