Usando procedimentos armazenados com o Entity Framework 4 Code First CTP5
Estou usando o CTP5 do Code First Entity Framework 4 e o ASP.NET MVC 3. Gostaria de saber como faço para usar procedimentos armazenados?
Eu tenho o seguinte código na minha classe de repositório:
MyDatabaseContext db = new MyDatabaseContext();
public void Insert(News news)
{
db.Newses.Add(news);
db.SaveChanges();
}
E então meu procedimento de armazenamento de inserção ficará assim:
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
Qualquer artigo / conselho seria apreciado.
ATUALIZAÇÃO 1:
Com o designer, eu poderia devolver o novo objeto ou ID de notícias, como eu faria isso aqui?
ATUALIZAÇÃO 2
Isto é o que eu fiz:
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();
}
Eu recebo um erro aqui dizendo:
A conversão especificada de um tipo 'System.Decimal' materializado para o tipo 'System.Int32' não é válida.
Minha turma de Notícias:
public class News
{
public int NewsId { get; set; }
public string Title { get; set; }
public string Body { get; set; }
public bool Active { get; set; }
}
Estou usando um banco de dados existente e minha cadeia de conexão fica assim:
<connectionStrings>
<add
name="MyDatabaseContext"
connectionString="Data Source=MyServer;Initial Catalog=MyDatabase;Integrated Security=True;"
providerName="System.Data.SqlClient" />
</connectionStrings>
Aqui está minha classe de contexto:
public class MyDatabaseContext : DbContext
{
public DbSet<News> Newses { get; set; }
}
Não tenho certeza do que estou fazendo de errado aqui? Meu procedimento armazenado pode estar incorreto? Idealmente, gostaria de retornar o novo objeto atualizado. Alguém pode aconselhar?