gpt4 book ai didi

c# - 从数据上下文 : Linq to SQl 获取存储过程

转载 作者:行者123 更新时间:2023-11-30 15:03:38 25 4
gpt4 key购买 nike

我在 SQL Server 中有一个名为 ParseXML 的存储过程。我有一个使用 LINQ to SQL 的存储库模式。我需要从存储库层调用存储过程。与 GetTable 方法不同,我们没有用于数据上下文的 GetStoredProcedure 方法。这种情况下如何调用存储过程?

数据库代码

[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.ParseXML")]

public ISingleResult<ParseXMLResult> ParseXML([global::System.Data.Linq.Mapping.ParameterAttribute(Name="InputXML", DbType="Xml")] System.Xml.Linq.XElement inputXML)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), inputXML);
return ((ISingleResult<ParseXMLResult>)(result.ReturnValue));
}

存储库层

namespace RepositoryLayer
{
public interface ILijosBankRepository
{
System.Data.Linq.DataContext Context { get; set; }
List<DBML_Project.BankAccount> GetAllAccountsForUser(int userID);
void UpdateBankAccountUsingStoredProcedure();

}

public class LijosSimpleBankRepository : ILijosBankRepository
{
public System.Data.Linq.DataContext Context
{
get;
set;
}


public List<DBML_Project.BankAccount> GetAllAccountsForUser(int userID)
{
IQueryable<DBML_Project.BankAccount> queryResultEntities = Context.GetTable<DBML_Project.BankAccount>().Where(p => p.AccountOwnerID == userID);
return queryResultEntities.ToList();
}


public virtual void UpdateBankAccountUsingStoredProcedure()
{
//Context.GetStroedProcedures();
}

}

}

引用:

  1. Multiple UnitOfWorks, ISession and repositories

最佳答案

你可以这样做,使用反射调用方法:

var inputXML = GetXML(); 

var method = Context.GetType().GetMethod("ParseXML");

if(method == null) throw new InvalidOperationException("Defined DataContext does not have method ParseXML");

var result = method.Invoke(Context, new object[]{ inputXML });

如果您使用的是 c# 4.0,您可以:

var inputXML = GetXML(); 

dynamic dynamicContext = Context;

var result = (ISingleResult<ParseXMLResult>)dynamicContext.ParseXML(inputXML);

关于c# - 从数据上下文 : Linq to SQl 获取存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11310996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com