我一直在試圖理解爲什麼我在嘗試使用插入記錄的過程中出現異常。我在數據庫中有一個公司表,其中有Id(Guid),Name(nvarchar)和timestamp(日期時間)。Id列是RowGuid。我也是使用SQL Server 2005和EF4例外當使用存儲過程來使用實體框架插入記錄
存儲過程是
ALTER PROCEDURE [dbo].[InsertCompanySP]
@companyName NVarChar(50),
@timeStamp datetime
AS
BEGIN
SET NOCOUNT ON;
Insert into dbo.Company(Name,TimeStamp) values (@companyName, @timeStamp)
select SCOPE_IDENTITY() as Id
END
我使用調用此存儲過程的代碼是
using (var context = new testEntities())
{
try
{
Company c = new Company();
c.Name = "abcd";
c.TimeStamp = DateTime.Now;
context.Companies.AddObject(c);
context.SaveChanges();
Console.WriteLine(c.Id);
}
catch (Exception ex)
{
Console.WriteLine("Exception Occurred");
}
}
,你可以猜測,在實體框架模型的插入存儲過程映射companyName和timeStamp綁定到我公司實體的Name和TimeStamp屬性,並且Id綁定到公司實體的Id屬性。如果我繼續前進並刪除結果列綁定,則一切正常(存儲過程被調用,不會引發異常)。當我將結果綁定到返回已添加公司的Id時,仍然可以看到正在調用的完全相同的存儲過程,但它會拋出一個異常,說
「空存儲生成值返回爲類型爲'testModel.Company'的非空成員'Id'。「
我假設我可能有不正確的東西在我的存儲過程中返回插入的行的Id,但我無法弄清楚。我使用存儲過程中的下列返回插入公司標識的價值也試過,但我仍然得到同樣的異常
select Id = @@IDENTITY
更新:我忘了提的是,ID也標有StoreGeneratedPattern =身份在EF
更新:我解決了由於問題@olivehour ..修改了我的存儲過程來
ALTER PROCEDURE [dbo].[InsertCompanySP]
@companyName NVarChar(50),
@timeStamp datetime
AS
BEGIN
SET NOCOUNT ON;
DECLARE @TmpTable TABLE (Id uniqueidentifier);
Insert into dbo.Company(Name,TimeStamp)
OUTPUT INSERTED.Id INTO @TmpTable
values (@companyName, @timeStamp)
select Id from @TmpTable
END