2011-12-09 73 views
0

我一直在試圖理解爲什麼我在嘗試使用插入記錄的過程中出現異常。我在數據庫中有一個公司表,其中有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 

回答

相關問題