Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
LINQ to SQL udostępnia wiele zasobów do wykrywania i rozwiązywania konfliktów wynikających ze zmian wielu użytkowników w bazie danych. Aby uzyskać więcej informacji, zobacz Jak zarządzać konfliktami zmian.
Przykład
W poniższym przykładzie przedstawiono blok try/catch, który przechwytuje wyjątek ChangeConflictException. Informacje o jednostkach i członkach dla każdego konfliktu są wyświetlane w oknie konsoli.
Uwaga
Aby obsługiwać pobieranie informacji, należy uwzględnić dyrektywę using System.Reflection (Imports System.Reflection w języku Visual Basic). Aby uzyskać więcej informacji, zobacz System.Reflection.
// using System.Reflection;
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
Customer newCust = new Customer();
newCust.City = "Auburn";
newCust.CustomerID = "AUBUR";
newCust.CompanyName = "AubCo";
db.Customers.InsertOnSubmit(newCust);
try
{
db.SubmitChanges(ConflictMode.ContinueOnConflict);
}
catch (ChangeConflictException e)
{
Console.WriteLine("Optimistic concurrency error.");
Console.WriteLine(e.Message);
Console.ReadLine();
foreach (ObjectChangeConflict occ in db.ChangeConflicts)
{
MetaTable metatable = db.Mapping.GetTable(occ.Object.GetType());
Customer entityInConflict = (Customer)occ.Object;
Console.WriteLine($"Table name: {metatable.TableName}");
Console.Write("Customer ID: ");
Console.WriteLine(entityInConflict.CustomerID);
foreach (MemberChangeConflict mcc in occ.MemberConflicts)
{
object currVal = mcc.CurrentValue;
object origVal = mcc.OriginalValue;
object databaseVal = mcc.DatabaseValue;
MemberInfo mi = mcc.Member;
Console.WriteLine($"Member: {mi.Name}");
Console.WriteLine($"current value: {currVal}");
Console.WriteLine($"original value: {origVal}");
Console.WriteLine($"database value: {databaseVal}");
}
}
}
catch (Exception ee)
{
// Catch other exceptions.
Console.WriteLine(ee.Message);
}
finally
{
Console.WriteLine("TryCatch block has finished.");
}
' Imports System.Reflection
Dim newCust As New Customer()
newCust.City = "Auburn"
newCust.CustomerID = "AUBUR"
newCust.CompanyName = "AubCo"
db.Customers.InsertOnSubmit(newCust)
Try
db.SubmitChanges(ConflictMode.ContinueOnConflict)
Catch e As ChangeConflictException
Console.WriteLine("Optimistic concurrency error.")
Console.WriteLine(e.Message)
Console.ReadLine()
For Each occ In db.ChangeConflicts
Dim metatable As MetaTable = db.Mapping.GetTable(occ.Object.GetType())
Dim entityInConflict = CType(occ.Object, Customer)
Console.WriteLine("Table name: {0}", metatable.TableName)
Console.Write("Customer ID: ")
Console.WriteLine(entityInConflict.CustomerID)
For Each mcc In occ.MemberConflicts
Dim currVal = mcc.CurrentValue
Dim origVal = mcc.OriginalValue
Dim databaseVal = mcc.DatabaseValue
Dim mi = mcc.Member
Console.WriteLine("Member: {0}", mi.Name)
Console.WriteLine("current value: {0}", currVal)
Console.WriteLine("original value: {0}", origVal)
Console.WriteLine("database value: {0}", databaseVal)
Next
Next
Catch ee As Exception
' Catch other exceptions.
Console.WriteLine(ee.Message)
Finally
Console.WriteLine("TryCatch block has finished.")
End Try