因此,我對EF 6.1有一個反向工程(代碼優先)方法。我正在使用POCO生成器VS擴展從現有數據庫生成(逆向工程)我的表等。EF(6.1)代碼優先存儲過程問題
在我的上下文類中,我調用了用於插入,刪除和更新事件的存儲過程,是一個問題:
modelBuilder.Entity<StandardAdditionalInformation>().MapToStoredProcedures(s =>
s.Insert(u => u.HasName("standard_additionalinformation_save")
.Parameter(p => p.Notes, "Notes")
.Parameter(p => p.StandardOptout, "StandardOptout")
.Parameter(p => p.StandardOptoutReason, "StandardOptoutReason")
.Parameter(p => p.IsDeleted, "IsDeleted")
.Parameter(p => p.CreateDate, "CreateDate")
.Parameter(p => p.CreatedByAccountId, "CreatedByAccountId")
.Parameter(p => p.UpdateDate, "UpdateDate")
.Parameter(p => p.ModifiedByAccountId, "ModifiedByAccountId")
).Update(u => u.HasName("standard_additionalinformation_save")
.Parameter(p => p.StandardId, "StandardId")
.Parameter(p => p.ClassId, "ClassId")
.Parameter(p => p.Notes, "Notes")
.Parameter(p => p.StandardOptout, "StandardOptout")
.Parameter(p => p.StandardOptoutReason, "StandardOptoutReason")
.Parameter(p => p.IsDeleted, "IsDeleted")
.Parameter(p => p.CreateDate, "CreateDate")
.Parameter(p => p.CreatedByAccountId, "CreatedByAccountId")
.Parameter(p => p.UpdateDate, "UpdateDate")
.Parameter(p => p.ModifiedByAccountId, "ModifiedByAccountId")
).Delete(u => u.HasName("standard_additionalinformation_delete")
.Parameter(p => p.StandardId, "StandardId")
.Parameter(p => p.ClassId, "ClassId")
));
所以,基本上,調用存儲過程很簡單,只要 db.Set()添加(值); //其中value是一個StandardAdditionalInformation對象。 db.SaveChanges();
對於絕大多數電話(99%)它將是一個更新。
我的問題就在這裏:當我調用更新,我帶有一個例外:
Procedure or function standard_additionalinformation_save has too many arguments specified.
因此,進一步挖掘,運行SQL跟蹤,等以後,我想出了這個作爲實際更新呼叫:
exec [dbo].[gsp_dal_teacherclass_standard_additionalinformation_save] @StandardId=12,@ClassId=1,@Notes=N'blah',@StandardOptout=0,@StandardOptoutReason=N'',@IsDeleted=0,@CreateDate='2014-05-02 13:03:00',@CreatedByAccountId=34068,@UpdateDate='2014-05-12 10:05:04.6067328',@ModifiedByAccountId=34068,@StandardAdditionalInformation_StandardId=NULL,@StandardAdditionalInformation_ClassId=NULL
EF好像是注入2個參數到SPROC呼叫:
@StandardAdditionalInformation_StandardId=NULL
@StandardAdditionalInformation_ClassId=NULL
這些在ANYWHERE代碼中沒有被引用,但是它們是表格本身PK的值。
有什麼我失蹤了嗎?我的意思是,存儲過程不應該只用上下文構建器中定義的參數來調用? 我的工作是將這兩個參數添加到存儲介質中,並且工作得很好,我只是認爲這是一個非常骯髒的解決方案,不希望它得到刺激!