考虑我已经构建了DAL.dll,它是一个包含Entity Framework edmx的类库。在Designer.cs中,定义了以下导入的存储过程:
<Function Name="Login_User" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo">
<Parameter Name="Login_Name" Type="nvarchar" Mode="In" />
<Parameter Name="Password" Type="nvarchar" Mode="In" />
<Parameter Name="SP_Return_Code" Type="int" Mode="InOut" />
</Function>
下面我使用Reflection来查找type1作为ObjectContext类型。如何通过反映type1?
来发现Login_User存储过程 private static void ReflectionTest()
{
var asm = Assembly.LoadFrom(@"C:\DAL.dll");
// list stored procedure calls
foreach (var type in asm.GetTypes())
{
if (type.BaseType == typeof(ObjectContext))
{
foreach (var type1 in type.GetMethods())
{
// how do I reflect against type1 for its stored procedure names?
}
}
}
}
答案 0 :(得分:2)
首先,您需要在实体模型中将存储过程导入Function
。有关HowTo:http://ashishrocks.wordpress.com/2010/09/05/entity-framework-using-select-stored-procedures-for-entities-having-same-column-names/
在您执行此操作时,请确保为Function Import Name
使用某种命名约定。例如,为所有存储过程函数导入添加前缀SP_
。
在您的实体模型中添加SP作为功能后,您应该可以在Model.Designer.cs
中看到它们。编译更新的DAL。
现在您可以获得这样的存储过程:
Assembly assembly = Assembly.LoadFrom(@"C:\DAL.dll");
foreach (MethodInfo methodInfo in from type in assembly.GetTypes()
where type.BaseType == typeof (ObjectContext)
from methodInfo in type.GetMethods()
where methodInfo.Name.StartsWith("SP_")
select methodInfo)
{
Console.WriteLine(methodInfo.Name);
}
Console.ReadLine();