You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
EntityFrameworkCore.Jet/test/EFCore.Jet.IntegrationTests/Model10/Test.cs

52 lines
2.0 KiB
C#

using System;
using System.Linq;
using Microsoft.EntityFrameworkCore;
namespace EntityFrameworkCore.Jet.IntegrationTests.Model10
{
public abstract class Test : TestBase<TestContext>
{
//[TestMethod]
public void Run()
{
var someClass = new SomeClass() {Name = "A"};
someClass.Behavior = new BehaviorA() {BehaviorASpecific = "Behavior A"};
Context.SomeClasses.Add(someClass);
// Here I have two classes with the state of added which make sense
var modifiedEntities = Context.ChangeTracker.Entries()
.Where(entity => entity.State != EntityState.Unchanged).ToList();
// They save with no problem
Context.SaveChanges();
//someClass.Behavior = null;
//Context.SaveChanges();
// Now I want to change the behavior and it causes entity to try to remove the behavior and add it again
someClass.Behavior = new BehaviorB() {BehaviorBSpecific = "Behavior B"};
// Here it can be seen that we have a behavior A with the state of deleted and
// behavior B with the state of added
modifiedEntities = Context.ChangeTracker.Entries()
.Where(entity => entity.State != EntityState.Unchanged).ToList();
foreach (var modifiedEntity in modifiedEntities)
Console.WriteLine("{0} {1}", modifiedEntity.Entity, modifiedEntity.State);
// But in reality when entity sends the query to the database it replaces the
// remove and insert with an update query (this can be seen in the SQL Profiler)
// which causes the discrimenator to remain the same where it should change.
Context.SaveChanges();
Behavior b = Context.Behaviors.First();
someClass.Behavior = b;
Context.SaveChanges();
someClass.Behavior = new BehaviorA() {BehaviorASpecific = "Behavior C"};
Context.SaveChanges();
}
}
}