Подтвердить что ты не робот

Использование хранимых процедур с Entity Framework 4 Code First CTP5

Я использую Entity Framework 4 Code First CTP5 и ASP.NET MVC 3. Я хотел бы знать, как использовать хранимые процедуры?

У меня есть следующий код в моем классе репозитория:

MyDatabaseContext db = new MyDatabaseContext();

public void Insert(News news)
{
   db.Newses.Add(news);
   db.SaveChanges();
}

И тогда моя процедура хранения вставки будет выглядеть так:

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

Любые статьи/рекомендации будут оценены.

ОБНОВЛЕНИЕ 1:

С дизайнером я могу вернуть новый объект или идентификатор новостей, как бы это сделать здесь?

ОБНОВЛЕНИЕ 2

Это то, что я сделал:

public void Insert(News news)
{
   int newsId = context.Database.SqlQuery<int>("News_Insert @Title, @Body, @Active",
      new SqlParameter("Title", news.Title),
      new SqlParameter("Body", news.Body),
      new SqlParameter("Active", news.Active)
   ).FirstOrDefault();

   context.SaveChanges();
}

Я получаю сообщение об ошибке:

Указанный сброс из материализованного типа System.Decimal в тип "System.Int32" недействителен.

Класс My News:

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

Я не уверен, что я здесь делаю неправильно? Возможно, неправильная моя хранимая процедура? В идеале я хотел бы вернуть новый обновленный объект. Может кто-нибудь проконсультироваться?

4b9b3361

Ответ 1

Нет поддержки прямого отображения хранимых процедур (как известно из EDMX). Вы можете просто вызвать вашу процедуру вместо метода Add с помощью метода db.Database.SqlCommand. Попробуйте следующее:

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

Ответ 2

вы можете записывать хранимые процедуры в sql и обновлять сущность, а затем преобразовывать их в функцию и использовать ее, например, функцию в вашей программе, db-click на Entity Model и на открытой странице (EntityModel), затем на правой странице db -click в папке, которая называется StoredproceduresEntity, и затем щелкните правой кнопкой мыши по a StoredProcedures и выберите опцию AddFunction..., затем выберите тип вывода идти к: http://msdn.microsoft.com/en-us/data/gg699321.aspx