Utilizando procedimientos almacenados con Entity Framework 4 Code First CTP5
Estoy usando Entity Framework 4 Code First CTP5 y ASP.NET MVC 3. ¿Me gustaría saber cómo hago uso de los procedimientos almacenados?
Tengo el siguiente código en mi clase de repositorio:
MyDatabaseContext db = new MyDatabaseContext();
public void Insert(News news)
{
db.Newses.Add(news);
db.SaveChanges();
}
Y luego mi procedimiento de almacenamiento de inserción se verá así:
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
Cualquier artículo / consejo sería apreciado.
UPDATE 1:
Con el diseñador podría devolver el nuevo objeto o ID de noticias, ¿cómo haría esto aquí?
UPDATE 2
Esto es lo que hice
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();
}
Aquí aparece un error que dice:
La conversión especificada de un tipo materializado 'System.Decimal' al tipo 'System.Int32' no es válida.
Mi clase de noticias:
public class News
{
public int NewsId { get; set; }
public string Title { get; set; }
public string Body { get; set; }
public bool Active { get; set; }
}
Estoy usando una base de datos existente y mi cadena de conexión se ve así:
<connectionStrings>
<add
name="MyDatabaseContext"
connectionString="Data Source=MyServer;Initial Catalog=MyDatabase;Integrated Security=True;"
providerName="System.Data.SqlClient" />
</connectionStrings>
Aquí está mi clase de contexto:
public class MyDatabaseContext : DbContext
{
public DbSet<News> Newses { get; set; }
}
No estoy seguro de lo que estoy haciendo mal aquí? ¿Mi procedimiento almacenado puede ser incorrecto? Idealmente, me gustaría devolver el nuevo objeto actualizado. ¿Alguien puede aconsejarme?