1

我有这个用于登录的存储过程

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

我想将它与具有返回结果的实体框架一起使用。我该怎么做?请帮我...

4

3 回答 3

0

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

您可以使用db.Database.SqlCommand 方法简单地调用您的过程而不是 Add方法。

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

新闻类:

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>

数据库上下文

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));

以下是一些有用的链接以获取更多详细信息

尼古拉斯博客文章

超越关系博客文章

于 2012-12-15T10:19:06.530 回答
0

这是一个关于如何通过实体框架存储过程在实体框架中使用存储过程的链接

于 2012-12-15T10:31:11.037 回答
0

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

于 2012-12-16T06:22:47.547 回答