Entity Framework 6 A dependent property in a ReferentialConstraint is mapped to a store-generated column. Error

entity-framework entity-framework-6

Question

I have 2 entities configured using Entity Framework 6. Both entities have Identity on for generating primary keys on insert.

When i try adding new customer I get following error. A dependent property in a ReferentialConstraint is mapped to a store-generated column. Column: 'Id'.

My assumption is that I did not configured one of the entities properly for one to one relationships.

public class Customer : IdEntity
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public Guid? BalanceId { get; set; }
        public DateTime? Dob { get; set; }
        public DateTime CreateDate { get; set; }

        public CustomerBalance Balance { get; set; }
        public Address Address { get; set; }

        public virtual ICollection<Email> Emails { get; set; } = new List<Email>();
        public virtual ICollection<Phone> Phones { get; set; } = new List<Phone>();
        public virtual ICollection<Reward> Rewards { get; set; }
        public ICollection<Call> Calls { get; set; }
    }

Here is mapping for Customer

public class CustomerConfiguration : EntityTypeConfiguration<Customer>
    {
        public CustomerConfiguration()
        {
            ToTable(nameof(Customer));
            HasKey(x => x.Id).Property(x => x.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
            HasMany(x => x.Phones);
            HasMany(x => x.Emails);
            HasOptional(x => x.Balance);
 HasRequired(x => x.Address).WithRequiredDependent(x=>x.Customer);
        }

    }

Here is Address Entity

public class Address : IdEntity
    {
        public string Address1 { get; set; }
        public string Address2 { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public string Zip { get; set; }
        public string Country { get; set; }
        public int CustomerId { get; set; }

        public virtual Customer Customer { get; set; }
    }

And mapping

 public class AddressConfiguration : EntityTypeConfiguration<Address>
    {
        public AddressConfiguration()
        {
            ToTable(nameof(Address));
            HasKey(x => x.Id, e => e.IsClustered())
                .Property(x => x.Id)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

        }
    }

Here is a code how i insert new customer

 var customer = new Customer
            {
                FirstName = request.FirstName,
                LastName = request.LastName,
                CreateDate = DateTime.Now,
                Address = new Address()
            };
            if (!string.IsNullOrEmpty(request.Email))
                customer.Emails.Add(new Email { EmailName = request.Email, IsPrimary = true });
            if (!string.IsNullOrEmpty(request.Phone))
                customer.Phones.Add(new Phone { Number = request.Phone, IsPrimary = true });

            _repository.AddOneAsync(customer);
            await _repository.Context.SaveChangesAsync();

Error is happening on save changes. Address and Customer are one to one relationship.

Here is how my tables are configured at SQL

https://ibb.co/cYYphbJ

https://ibb.co/LnXcsyB

1
0
4/19/2019 9:01:17 PM

Accepted Answer

One-to-One relationships in EF6 must use the same keys. EG Address.CustomerId would have to be its key.

Either allow customers to have multiple addresses in the model, or change the key of Address to be CustomerID.

2
4/19/2019 10:49:07 PM


Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow