本文整理汇总了C#中DbContext.SaveChangesAsync方法的典型用法代码示例。如果您正苦于以下问题:C# DbContext.SaveChangesAsync方法的具体用法?C# DbContext.SaveChangesAsync怎么用?C# DbContext.SaveChangesAsync使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DbContext
的用法示例。
在下文中一共展示了DbContext.SaveChangesAsync方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: It_throws_object_disposed_exception
public async void It_throws_object_disposed_exception()
{
var context = new DbContext(new DbContextOptions<DbContext>());
context.Dispose();
// methods (tests all paths)
Assert.Throws<ObjectDisposedException>(() => context.Add(new object()));
Assert.Throws<ObjectDisposedException>(() => context.Attach(new object()));
Assert.Throws<ObjectDisposedException>(() => context.Update(new object()));
Assert.Throws<ObjectDisposedException>(() => context.Remove(new object()));
Assert.Throws<ObjectDisposedException>(() => context.SaveChanges());
await Assert.ThrowsAsync<ObjectDisposedException>(() => context.SaveChangesAsync());
var methodCount = typeof(DbContext).GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly).Count();
var expectedMethodCount = 27;
Assert.True(
methodCount == expectedMethodCount,
userMessage: $"Expected {expectedMethodCount} methods on DbContext but found {methodCount}. " +
"Update test to ensure all methods throw ObjectDisposedException after dispose.");
// getters
Assert.Throws<ObjectDisposedException>(() => context.ChangeTracker);
Assert.Throws<ObjectDisposedException>(() => context.Model);
var expectedProperties = new List<string> { "ChangeTracker", "Database", "Model" };
Assert.True(expectedProperties.SequenceEqual(
typeof(DbContext)
.GetProperties()
.Select(p => p.Name)
.OrderBy(s => s)
.ToList()),
userMessage: "Unexpected properties on DbContext. " +
"Update test to ensure all getters throw ObjectDisposedException after dispose.");
Assert.Throws<ObjectDisposedException>(() => ((IInfrastructure<IServiceProvider>)context).Instance);
}
示例2: Can_add_update_delete_end_to_end_using_partial_shadow_state
public async Task Can_add_update_delete_end_to_end_using_partial_shadow_state()
{
var model = new Model();
var customerType = new EntityType(typeof(Customer));
customerType.SetKey(customerType.AddProperty("Id", typeof(int), shadowProperty: false, concurrencyToken: false));
customerType.AddProperty("Name", typeof(string), shadowProperty: true, concurrencyToken: false);
model.AddEntityType(customerType);
var options = new DbContextOptions()
.UseModel(model)
.UseInMemoryStore();
var customer = new Customer { Id = 42 };
using (var context = new DbContext(options))
{
context.Add(customer);
// TODO: Better API for shadow state access
var customerEntry = context.ChangeTracker.Entry(customer).StateEntry;
customerEntry[customerType.GetProperty("Name")] = "Daenerys";
await context.SaveChangesAsync();
customerEntry[customerType.GetProperty("Name")] = "Changed!";
}
using (var context = new DbContext(options))
{
var customerFromStore = context.Set<Customer>().Single();
Assert.Equal(42, customerFromStore.Id);
Assert.Equal(
"Daenerys",
(string)context.ChangeTracker.Entry(customerFromStore).Property("Name").CurrentValue);
}
using (var context = new DbContext(options))
{
var customerEntry = context.ChangeTracker.Entry(customer).StateEntry;
customerEntry[customerType.GetProperty("Name")] = "Daenerys Targaryen";
context.Update(customer);
await context.SaveChangesAsync();
}
using (var context = new DbContext(options))
{
var customerFromStore = context.Set<Customer>().Single();
Assert.Equal(42, customerFromStore.Id);
Assert.Equal(
"Daenerys Targaryen",
(string)context.ChangeTracker.Entry(customerFromStore).Property("Name").CurrentValue);
}
using (var context = new DbContext(options))
{
context.Delete(customer);
await context.SaveChangesAsync();
}
using (var context = new DbContext(options))
{
Assert.Equal(0, context.Set<Customer>().Count());
}
}
示例3: SaveChangesAsync_calls_state_manager_SaveChangesAsync
public async Task SaveChangesAsync_calls_state_manager_SaveChangesAsync()
{
var services = new ServiceCollection()
.AddScoped<IStateManager, FakeStateManager>()
.AddScoped<IChangeDetector, FakeChangeDetector>();
var serviceProvider = TestHelpers.Instance.CreateServiceProvider(services);
using (var context = new DbContext(serviceProvider, new DbContextOptionsBuilder().Options))
{
context.ChangeTracker.AutoDetectChangesEnabled = false;
var stateManager = (FakeStateManager)context.GetService<IStateManager>();
var entryMock = CreateInternalEntryMock();
entryMock.Setup(m => m.EntityState).Returns(EntityState.Modified);
stateManager.InternalEntries = new[] { entryMock.Object };
Assert.False(stateManager.SaveChangesAsyncCalled);
await context.SaveChangesAsync();
Assert.True(stateManager.SaveChangesAsyncCalled);
}
}
示例4: Can_add_update_delete_end_to_end_using_only_shadow_state
public async Task Can_add_update_delete_end_to_end_using_only_shadow_state()
{
var model = new Model();
var customerType = new EntityType("Customer");
customerType.SetKey(customerType.AddProperty("Id", typeof(int), shadowProperty: true, concurrencyToken: false));
customerType.AddProperty("Name", typeof(string), shadowProperty: true, concurrencyToken: false);
model.AddEntityType(customerType);
var options = new DbContextOptions()
.UseModel(model)
.UseInMemoryStore();
using (var context = new DbContext(options))
{
// TODO: Better API for shadow state access
var customerEntry = context.ChangeTracker.StateManager.CreateNewEntry(customerType);
customerEntry[customerType.GetProperty("Id")] = 42;
customerEntry[customerType.GetProperty("Name")] = "Daenerys";
await customerEntry.SetEntityStateAsync(EntityState.Added);
await context.SaveChangesAsync();
customerEntry[customerType.GetProperty("Name")] = "Changed!";
}
// TODO: Fix this when we can query shadow entities
// var customerFromStore = await inMemoryDataStore.Read(customerType).SingleAsync();
//
// Assert.Equal(new object[] { 42, "Daenerys" }, customerFromStore);
using (var context = new DbContext(options))
{
var customerEntry = context.ChangeTracker.StateManager.CreateNewEntry(customerType);
customerEntry[customerType.GetProperty("Id")] = 42;
customerEntry[customerType.GetProperty("Name")] = "Daenerys Targaryen";
await customerEntry.SetEntityStateAsync(EntityState.Modified);
await context.SaveChangesAsync();
}
// TODO: Fix this when we can query shadow entities
// customerFromStore = await inMemoryDataStore.Read(customerType).SingleAsync();
//
// Assert.Equal(new object[] { 42, "Daenerys Targaryen" }, customerFromStore);
using (var context = new DbContext(options))
{
var customerEntry = context.ChangeTracker.StateManager.CreateNewEntry(customerType);
customerEntry[customerType.GetProperty("Id")] = 42;
await customerEntry.SetEntityStateAsync(EntityState.Deleted);
await context.SaveChangesAsync();
}
// TODO: Fix this when we can query shadow entities
// Assert.Equal(0, await inMemoryDataStore.Read(customerType).CountAsync());
}