从存储过程中获取实体模型?

时间:2014-04-04 05:33:15

标签: c# entity-framework stored-procedures

我正在尝试获取存储过程的返回类型以匹配实体模型,这是一个简化版本:

ALTER PROCEDURE [dbo].[GetPerson]
@userId INT
AS
BEGIN
    SET NOCOUNT ON;

    -- Perform INSERT statement

    SELECT 
        *
    FROM
        People
    WHERE
        PersonId = @result;
END

目前,此存储过程根据我的EDMX返回一个整数。但是,我希望它返回一个Person对象。我该怎么做呢?我正在使用Entity Framework 6

1 个答案:

答案 0 :(得分:0)

恕我直言你无法从sql server返回一个CLR对象。您可以做的最好的事情是返回与C#代码中的实体类型完全匹配的正确字符串,并使用反射来创建对象。

例如

  1. 您可以在以下"NamespaceName.TypeName,AssemblyName"中添加一个字符串,该字符串将从您的sql
  2. 返回
  3. 然后在c#端,您可以将其拆分为typename和assemblyname。然后,您可以将这些传递给以下方法。
  4. using System.Reflection;
    
    public static object CreateInstance(string typeName, string assemblyName)
    {
        object result = null;
    
        try
        {
            Assembly assembly = Assembly.Load(assemblyName);
            Type type = assembly.GetType(typeName, true, false);
    
            result = Activator.CreateInstance(type);
        }
        catch (Exception ex)
        {
            //Handle exception here
        }
    
        if (result == null)
        {
            //Can handle null here
        }
    
        return result;
    }
    

    当然,此方法假定您的类具有默认构造函数。如果没有,那么你需要相应地修改代码。

    希望这有帮助。