LINQ to SQL SubmitChanges不工作FILESTREAM表

时间:2010-10-26 19:16:29

标签: wcf linq-to-sql sql-server-2008 filestream submitchanges

我有一些代码将数据插入到某些表中(一个表有一个FILESTREAM列),然后在完成后调用SubmitChanges。

db.Log = new System.IO.StreamWriter(@"c:\windows\temp\linq.log") { AutoFlush = true };
db.SubmitChanges(ConflictMode.FailOnFirstConflict);

我引用了以下链接,但它们似乎不是我的问题:

LINQ to SQL: SubmitChanges() does not work?

LINQ not updating on .SubmitChanges()

每个表都有一个主键。 alt text

我有14个表,我看到linq.designer.cs中包含14个IsPrimaryKey = true

虽然我确实看到Files表中缺少“AutoSync = AutoSync.OnInsert”,但我认为这是因为没有设置IDENTITY(使用guid作为主键)。

当我检查数据库时,没有插入任何内容。 linq.log显示:

INSERT INTO [dbo].[Files]([fileID], [FileContents], [dteCreated], [dteLastModified], [txtDesc], [mimeID], [txtName], [txtTitle], [dteDeleted])
VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8)
-- @p0: Input UniqueIdentifier (Size = -1; Prec = 0; Scale = 0) [92190315-1107-4848-94b3-dd9badf4465b]
-- @p1: Input VarBinary (Size = -1; Prec = 0; Scale = 0) [SqlBinary(24064)]
-- @p2: Input DateTime2 (Size = -1; Prec = 0; Scale = 0) [10/26/2010 1:54:55 PM]
-- @p3: Input DateTime2 (Size = -1; Prec = 0; Scale = 0) [10/26/2010 1:54:55 PM]
-- @p4: Input VarChar (Size = 8000; Prec = 0; Scale = 0) [This is my new file]
-- @p5: Input Int (Size = -1; Prec = 0; Scale = 0) [3]
-- @p6: Input VarChar (Size = 8000; Prec = 0; Scale = 0) [MySecondTestDoc.doc]
-- @p7: Input VarChar (Size = 8000; Prec = 0; Scale = 0) [My Other Test Document]
-- @p8: Input DateTime2 (Size = -1; Prec = 0; Scale = 0) []
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1

INSERT INTO [dbo].[UserFiles]([fileID], [userID], [rightsID])
VALUES (@p0, @p1, @p2)

SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
-- @p0: Input UniqueIdentifier (Size = -1; Prec = 0; Scale = 0) [92190315-1107-4848-94b3-dd9badf4465b]
-- @p1: Input Int (Size = -1; Prec = 0; Scale = 0) [1]
-- @p2: Input Int (Size = -1; Prec = 0; Scale = 0) [3]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1

当我查看Server Profiler时,它会记录RPC:Completed exec sp_executesql“Good Insert Statement”

当我通过Server Manager Studio手动运行sql时,一切正常。我可以通过使用SA登录或使用Web服务使用的凭据来成功地完成此任务。

LINQ SubmitChanges虽然没有抛出错误。有什么理由不工作?我没有在任何部分类中重载任何Insert / Update / DeleteFile函数。

修改其他表似乎工作正常。我想知道它是否与FILESTREAM列有关。

我的连接字符串是:

Data Source=IP;Initial Catalog=MyDB;User ID=myLogin;Password=myPswd

一旦我手动将记录放入表格(FILESTREAM表格),我就能很好地阅读这些数据。

最后,我将FILESTREAM配置为Transact-SQL访问,而不是文件i / o流访问。根据我的理解,我没有看到需要一个共享文件夹到数据位置。我希望所有内容都通过数据库来获取FILESTREAM数据。

谢谢!

固定

我有以下代码:

public TransactionScope CreateTransactionScope(TransactionScopeOption scope, IsolationLevel level)
{
  var transactionOptions = new TransactionOptions();
  transactionOptions.IsolationLevel = level;
  transactionOptions.Timeout = TimeSpan.MaxValue;
  return new TransactionScope(scope, transactionOptions);
}
public TransactionScope CreateTransactionScope(TransactionScopeOption scope)
{
  return CreateTransactionScope(scope, IsolationLevel.ReadCommitted);
}

我的submitchanges看起来像:

using (var ts = db.CreateTransactionScope(TransactionScopeOption.RequiresNew, IsolationLevel.ReadUncommitted))
    {
      db.SubmitChanges(ConflictMode.FailOnFirstConflict);
    }

人?任何人?我忘了完整的陈述......哈哈。我想我可能会在submitchanges区域添加更多内容并且可能想要回滚,所以我在那里留下了using语句,但从未提交我的更改...谢谢大家!

2 个答案:

答案 0 :(得分:1)

我忘记了交易中已完成的陈述

答案 1 :(得分:0)

大约一个月前,我从代码向sql server发送了一个插入查询。并且看着绝对没有发生。未插入任何记录且未记录任何错误。 Profiler显示正在提交的查询。如果我运行了探查器所具有的查询,那么它是有效的。绝对让我难以置信。

然后,在云雀上,我检查了安全性。 Lo并看到该网站正在执行的用户没有执行插入的权限。更新安全性后,一切都开始正常工作。

奇怪的是,绝对没有抛出任何错误。当我试图复制问题时,我开始遇到安全错误。我认为SQL服务器决定当天不报告。

你可以从那里开始。