我有一些代碼將數據插入某些表(一個表有一個FILESTREAM列),然後在完成後調用SubmitChanges。LINQ to SQL SubmitChanges不工作FILESTREAM表
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()
每個表都有一個主鍵。
我有14桌,我看到14 IsPrimaryKey =真包含於linq.designer.cs
雖然我看到「自動同步= 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
當我看着服務器探查它記錄RPC:完成EXEC sp_executesql的「好INSERT語句」
當我通過服務器管理工作室手動運行該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區域添加更多,並可能想要回滾,所以我離開了使用語句,但從未提交我的更改...謝謝大家!
這裏是奇怪的事情。我做了一個新的數據庫和一個新的控制檯應用程序,直接連接到測試數據庫,它工作正常。所以我改變控制檯應用程序linqs與我的其他數據庫(我有問題的)一起工作,並且它工作正常!因此,如果您正在使用帶有文件流的Web服務,您是否需要在文件組寫入的文件夾上設置任何特殊權限? – BabelFish 2010-10-27 02:06:09