如何在Entity Framework 4中使用我的存储过程?

时间:2012-12-15 10:02:25

标签: entity-framework stored-procedures entity-framework-4 entity

我有登录的存储过程

ALTER PROCEDURE usp_Login

    (
    @username varchar(50),
    @password varchar(50)
    )   
AS
BEGIN
DECLARE @loginflag VARCHAR(1)   
IF EXISTS (SELECT dbo.tbl_Login.Id FROM dbo.tbl_Login WHERE (dbo.tbl_Login.LoginId = @username))
    BEGIN
IF ((SELECT COUNT(dbo.tbl_Login.Id) FROM dbo.tbl_Login WHERE (dbo.tbl_Login.LoginId = @username) AND (dbo.tbl_Login.Loginpassword= @password))> 0)
        BEGIN
        WITH LoggedInUser AS 
        (
SELECT  L.LoginId,L.LoginRole,L.LoginPassword,L.UserId,S.FatherName,S.Name,S.RollNo,S.Marks,S.Dob,                    S.Address,S.PhoneNumber,S.CityId,S.EmailAddress,S.Gender,S.Password,             S.SiteUrl,S.StuAvtar,S.StuCv FROM dbo.tbl_Login AS L INNER JOIN dbo.tbl_Student AS S ON L.UserId = S.Id  
                       WHERE L.LoginPassword=@password AND L.LoginId=@username
        )
        SELECT *FROM LoggedInUser

        END
        ELSE        
            SELECT -98 AS Error --User Password Wrong   
    END 
    ELSE 
        SELECT -99  AS Error --USER NOT EXISTS
END

我希望将它与Entity Framework一起使用并返回结果。我该怎么做?请帮帮我......

3 个答案:

答案 0 :(得分:0)

使用Code First时存储过程没有直接映射支持

您只需使用 db.Database.SqlCommand方法调用您的过程而不是添加方法

试试这个(这是一个示例):

新闻类:

public class News
{
   public int NewsId { get; set; }
   public string Title { get; set; }
   public string Body { get; set; }
   public bool Active { get; set; }
}

连接字符串

<connectionStrings>
   <add
      name="MyDatabaseContext"
      connectionString="Data Source=MyServer;Initial Catalog=MyDatabase;Integrated Security=True;"
      providerName="System.Data.SqlClient" />
</connectionStrings>

<强>的DbContext

public class MyDatabaseContext : DbContext
{
   public DbSet<News> Newses { get; set; }
}

存储过程

ALTER PROCEDURE [dbo].[News_Insert]
(
   @Title VARCHAR(100),
   @Body VARCHAR(MAX),
   @NewsStatusId INT
)

AS

BEGIN

   INSERT INTO
      News
      (
         Title,
         Body,
         NewsStatusId
      )
      VALUES
      (
         @Title,
         @Body,
         @NewsStatusId
      );

  SELECT SCOPE_IDENTITY();

END

如何使用SP与上述型号(代码优先)

db.Database.SqlCommand("dbo.News_Insert @Title, @Body, @NewsStatusId",
  new SqlParameter("Title", news.Title),
  new SqlParameter("Body", news.Body),
  new SqlParameter("NewsStatusId", news.NewStatus.Id));

以下是一些有用的链接,了解更多详情

Nikolaos Blog Post

Beyondrelational Blog Post

答案 1 :(得分:0)

这是一个关于如何使用Entity Framework Stored Procedures in the Entity Framework

使用存储过程的链接

答案 2 :(得分:0)

你可以在sql和你的实体更新中编写存储过程,然后将其转换为函数并使用它,例如程序中的函数,db-单击实体模型和打开页面(EntityModel)然后我右侧页面db - 单击调用StoredproceduresEntity并打开的文件夹,然后右键单击StoredProcedures并选择AddFunction选项...然后选择输出类型转到:http://msdn.microsoft.com/en-us/data/gg699321.aspx