我有一些代码将数据插入到一些表中(一个表有一个 FILESTREAM 列),然后在完成后调用 SubmitChanges。
db.Log = new System.IO.StreamWriter(@"c:\windows\temp\linq.log") { AutoFlush = true };
db.SubmitChanges(ConflictMode.FailOnFirstConflict);
我已经引用了以下链接,但它们似乎不是我的问题:
LINQ to SQL:SubmitChanges() 不起作用?
每个表都有一个主键。
我有 14 个表,我看到 linq.designer.cs 中包含 14 个 IsPrimaryKey=true
虽然我确实看到文件表中缺少“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 表)中,我就可以很好地读取该数据。
最后,我为 Transact-SQL 访问配置了 FILESTREAM,而不是为文件 i/o 流访问配置了 FILESTREAM。根据我的理解,我认为不需要将共享文件夹保存到数据位置。我希望一切都通过数据库来获取 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 语句留在那里但从未提交我的更改......谢谢大家!