У меня есть некоторый код, который вставляет данные в некоторые таблицы (одна таблица имеет столбец FILESTREAM) и затем вызывает SubmitChanges после того, как это сделано.
db.Log = new System.IO.StreamWriter(@"c:\windows\temp\linq.log") { AutoFlush = true };
db.SubmitChanges(ConflictMode.FailOnFirstConflict);
Я ссылался на следующие ссылки, но они не являются моей проблемой:
LINQ to SQL: SubmitChanges () не работает?
LINQ не обновляется .SubmitChanges ()
Каждая таблица имеет первичный ключ.
У меня 14 таблиц, и я вижу 14 IsPrimaryKey = true, содержащееся в linq.designer.cs
Хотя я вижу, что "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: Завершено exec sp_executesql "Хорошая инструкция вставки"
Когда я запускаю sql вручную через Server Manager Studio, все работает нормально. Я могу сделать это успешно, войдя в систему с SA или используя учетные данные, используемые веб-службой.
LINQ SubmitChanges не выдает ошибку, хотя. Любая причина, почему это не работает? Я не перегружал никакие функции Insert / Update / DeleteFile ни в каких частичных классах.
Хотя изменение других таблиц работает нормально. Мне интересно, связано ли это со столбцом FILESTREAM.
Моя строка подключения:
Data Source=IP;Initial Catalog=MyDB;User ID=myLogin;Password=myPswd
После того, как я вручную поместил запись в таблицу (таблица FILESTREAM), я могу читать эти данные очень хорошо.
Наконец, у меня есть FILESTREAM, настроенный для доступа Transact-SQL, а не для потокового доступа файлового ввода-вывода. Из того, как я это понял, я не видел необходимости иметь общую папку для расположения данных. Я хотел, чтобы все прошло через базу данных, чтобы добраться до данных FILESTREAM.
Спасибо!
FIXED
У меня есть следующий код:
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);
}
и мои отправки выглядели так:
using (var ts = db.CreateTransactionScope(TransactionScopeOption.RequiresNew, IsolationLevel.ReadUncommitted))
{
db.SubmitChanges(ConflictMode.FailOnFirstConflict);
}
кто-нибудь? кто-нибудь? Я забыл полное утверждение ... лол. Я думал, что мог бы добавить больше в области submitchanges и, возможно, захочу откатить, поэтому я оставил там утверждение using, но никогда не фиксирую свои изменения ... Спасибо всем!