使用反射从实体数据模型中获取存储过程名称
本文关键字:获取 存储过程 数据模型 反射 实体 | 更新日期: 2023-09-27 18:21:46
考虑我已经构建了DAL.dll,这是一个包含实体框架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找到了作为ObjectContext类型的type1。如何通过反射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?
}
}
}
}
-
首先,您需要将存储过程作为
Function
导入实体模型中。请参阅此链接了解如何: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();