Я использую 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; }
}
Я не уверен, что я здесь делаю неправильно? Возможно, неправильная моя хранимая процедура? В идеале я хотел бы вернуть новый обновленный объект. Может кто-нибудь проконсультироваться?