After upgrading from .NetFramework with EF to .Net8 with EFCore I am unable to modify my SalesQuotes.
I am using Table Per Type.
The following code fails
var connect = HandyDefaults.MakeConnectFromConnectionString(connectionString);
var quote = connect.SalesQuotes.SingleOrDefault(x => x.DocumentNumber == "SQ000017");
var guidString = Guid.NewGuid().ToString();
quote.CustomerReference = guidString;
connect.SaveChanges();
connect = HandyDefaults.MakeConnectFromConnectionString(connectionString);
var quote2 = connect.SalesQuotes.SingleOrDefault(x => x.DocumentNumber == "SQ000017");
Assert.AreEqual(guidString, quote2.CustomerReference); // fails
Where the DbContext is constructed
public static MyEFCoreDbContext MakeConnectFromConnectionString(string connectionString)
{
var optionsBuilder = new DbContextOptionsBuilder<MyEFCoreDbContext>()
.UseSqlServer(connectionString)
.UseChangeTrackingProxies()
.UseObjectSpaceLinkProxies();
return new MyEFCoreDbContext(optionsBuilder.Options);
}
And in OnModelCreating I have
modelBuilder.SetOneToManyAssociationDeleteBehavior(DeleteBehavior.SetNull, DeleteBehavior.Cascade);
modelBuilder.HasChangeTrackingStrategy(ChangeTrackingStrategy.ChangingAndChangedNotificationsWithOriginalValues);
modelBuilder.UsePropertyAccessMode(PropertyAccessMode.PreferFieldDuringConstruction);
as well as
modelBuilder.Entity<SalesQuoteLine>()
.HasOne(j => j.SalesQuote)
.WithMany(x => x.Lines)
.HasForeignKey(x => x.SalesQuote_Id)
.OnDelete(DeleteBehavior.Cascade);
The business model is something like
public class SalesQuote : BaseSalesHeader
public SalesQuote(){
Lines = new ObservableCollection<SalesQuoteLine>();
}
public virtual ObservableCollection<SalesQuoteLine> Lines { get; set; }
// other properties
}
With BaseSalesHeader similar to
public abstract class BaseSalesHeader {} // contains properties common to different sales documents.
I am using EntityFrameworkCore 8.01, .net8 , C#, SQLServer
I am able to add Sales Quotes but not modify.