Open
Description
openedon Nov 5, 2018
The proposal is to add the following methods:
EntityEntry.GetOriginalValues(includeOwnedTypes: true);
EntityEntry.GetCurrentValues(includeOwnedTypes: true);
EntityEntry.GetDatabaseValues(includeOwnedTypes: true);
EntityEntry.Reload(includeOwnedTypes: true);
And to make nested access work:
EntityEntry<TEntity>.Property(e => e.CustomerName.FirstName);
EntityEntry<TEntity>.Property(e => e.Addresses[2].City);
Original issue below:
I attach an entity which has an owned type as its property.
Then I set original values which are different from the current values (on the owned type properties)
Steps to reproduce
// the owned type
public class CustomerName
{
public CustomerName()
{
}
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
}
public partial class Customer
{
public Customer()
{
CustomerAddress = new HashSet<CustomerAddress>();
SalesOrderHeader = new HashSet<SalesOrderHeader>();
CustomerName = new CustomerName();
}
public int CustomerId { get; set; }
public bool NameStyle { get; set; }
public string Title { get; set; }
// this is the property with the owned type
public CustomerName CustomerName { get; set; }
public ICollection<CustomerAddress> CustomerAddress { get; set; }
public ICollection<SalesOrderHeader> SalesOrderHeader { get; set; }
}
// the code for update (first name is different in the current and original owned type version )
public void UpdateCustomer(Customer customer)
{
customer.ModifiedDate = DateTime.Now;
var orig = this.GetOriginal<Customer>();
var entry = DB.Customer.Attach(customer);
// the change is not detected (although properties are different)
entry.OriginalValues.SetValues(orig);
}
the entity framework does not detect changes on SaveChanges the owned type is not updated (without error)
but if i update property on the owned type after attaching the entity
public void UpdateCustomer(Customer customer)
{
customer.ModifiedDate = DateTime.Now;
var orig = this.GetOriginal<Customer>();
var entry = DB.Customer.Attach(customer);
// change property on the owned type after attaching
customer.CustomerName.FirstName = "Dummy Name";
entry.OriginalValues.SetValues(orig);
}
then this change is detected and Saved to Database
Further technical details
EF Core version: Microsoft.EntityFrameworkCore.2.1.4
Database Provider: Microsoft.EntityFrameworkCore.SqlServer
Operating system: Visual Studio 2017 15.8.8
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment