C#实体框架ANSI NULL OFF

时间:2013-06-27 15:19:13

标签: c# .net sql-server entity-framework

我们创建了一个使用实体框架与数据库连接的WPF应用程序。在数据库中,我想要执行几个存储过程。我已将存储过程作为EF中的函数导入,一切似乎都没问题,但事实并非如此。如果我执行存储过程,数据库中没有任何反应。如果我使用相同的数据在SQL Server Management Studio中执行存储过程,则正在按预期处理某些行。情况并非总是如此。当我禁用CONCAT_NULL_YIELDS_NULL,QUOTED_IDENTIFIER,ANSI_NULL_DFLT_ON,ANSI_PADDING,ANSI_WARNINGS和ANSI_NULLS时,它才开始在SQL Server Management Studio中工作。我怎样才能使它在应用程序中起作用?

2 个答案:

答案 0 :(得分:1)

使用以下方法解决了这个问题:

Context.ExecuteStoreCommand(@"
   SET CONCAT_NULL_YIELDS_NULL OFF
   SET QUOTED_IDENTIFIER OFF
   SET ANSI_NULL_DFLT_ON OFF
   SET ANSI_PADDING OFF
   SET ANSI_WARNINGS OFF
   SET ANSI_NULLS OFF

   exec sp params
")

答案 1 :(得分:0)

如果您使用Entity Framework 6,那么我们可以设置Ansi警告,但其范围是事务,无论您使用sp或savechanges方法,您需要拥有此代码,然后您需要处理该事务

DbContextTransaction _transactionContext;
_transactionContext = _Context.Database.BeginTransaction();
_Context.Database.ExecuteSqlCommand("SET ANSI_WARNINGS OFF");
//Start:Below code is project specific
_Context.Entry(SBSB_SUBSC).State = entityState;
status = status + _Context.SaveChanges();
//End
if (_transactionContext != null)
    _transactionContext.Dispose();