[英]EF Core FromSQLRaw and Stored Procedures to insert data
我有一個實體框架核心應用程序。 我有一個用於插入數據的存儲過程。 存儲過程在別處使用,所以我無法更改它。
當我調用它來創建一個條目時,它不起作用,因為Description
列不是從存儲過程返回的。 因此,除非我將Description
設置為[NotMapped]
否則在調用FromSQLRaw
時會出現錯誤。
但是,我不想使用[NotMapped]
因為我可能會做類似的事情
dm.Offices.Where(o => o.Id > 10)
並且肯定[NotMapped]
不會返回未映射的列。 那我能做什么?
using (var dm = new DatabaseModel())
{
Office london = new Office { Description = "london" };
var item = dm.Offices.FromSqlRaw("EXECUTE sp_addoffice {0}", london.Description);
}
public partial class Office
{
[Key, Column("OfficeID")]
public int ID { get; set; }
public string Description { get; set; }
}
public partial class DatabaseModel : DbContext
{
public virtual DbSet<Office> Offices { get; set; }
}
CREATE TABLE [dbo].[Offices]
(
[OfficeID] [int] IDENTITY(1,1) NOT NULL primary key,
[Description] [varchar](50) NULL
)
CREATE PROCEDURE [dbo].[sp_addoffice]
@Description varchar(50)
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO offices (Description)
VALUES (@Description)
SELECT SCOPE_IDENTITY() AS OfficeID
END
創建新班級
public class OfficeId
{
public int Id {get; set;}
}
將此類添加到您的 EF 上下文中:
public virtual DbSet<OfficeId> OfficeIds { get; set; }
modelBuilder.Entity<OfficeId>(e =>
{
e.HasNoKey();
});
在此之后只使用這個:
var officeId = dm.OfficeIds.FromSqlRaw("EXECUTE sp_addoffice {0}", london.Description);
在此之后,您可以使用它,您可以驗證 officeId.Id 並使用您需要的任何方式。
您可以將 SQL 更改為在運行存儲過程后返回正確形狀的內容。 例如:
set nocount on;
declare @ids table(id int);
insert into @ids(id)
execute sp_addoffice {0};
select *
from offices
where id = ( select top 1 id from @ids );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.