【发布时间】:2014-05-12 14:20:46
【问题描述】:
所以我对 EF 6.1 有一种逆向工程(代码优先)方法。我正在使用 POCO 生成器 VS Extension 从现有数据库等生成(逆向工程)我的表。
在我的上下文类中,我调用了为插入、删除和更新事件连接的存储过程,这是有问题的:
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().Add(值); //其中 value 是 StandardAdditionalInformation 对象。 db.SaveChanges();
对于绝大多数电话 (99%) 来说,这将是一个更新。
我的问题在这里:当我调用更新时,出现异常:
Procedure or function standard_additionalinformation_save has too many arguments specified.
因此,在进一步挖掘、运行 SQL 跟踪等之后,我想出了这是 ACTUAL 更新调用:
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
这些在任何地方的代码中都没有引用,但它们是表本身的 PK 值。
我有什么遗漏吗?我的意思是,不应该只使用上下文构建器中定义的参数调用存储的过程吗? 我的解决方法是将这两个参数添加到存储过程中,效果很好,我只是认为这是一个非常肮脏的解决方案,不希望它受到刺激!
【问题讨论】:
标签: c# entity-framework stored-procedures ef-code-first