Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Entity Framework - Code First - Multiplicity constraint violated, The role X of the relationship Y has multiplicity 1 or 0..1

Using code first (EF 6), I created a 1 parent - 2 child relationship. Property is the parent object and Property Address as a child with 1 or 0..1 relationship. PropertyImage is another child with 1 to many relationship. PropertyImage works fine but the PropertyAddress throws error if I try to eager load .

Actual Error -

Multiplicity constraint violated. The role 'PropertyAddress_Property_Source' of the relationship 'MyAssetTracker.DataLayer.Models.PropertyAddress_Property' has multiplicity 1 or 0..1.

    // Test Function            
GetProperty()
{
Property property;
            using (var repo = new PropertyRepository())
            {
                property = repo.AllIncluding(a=>a.Images, a=>a.Address).FirstOrDefault(a => a.Id == testpropertyid);
            }
}


//Property Repository
public class PropertyRepository : IPropertyRepository
{


        public IQueryable<Property> AllIncluding(params Expression<Func<Property, object>>[] includeProperties)
        {
            IQueryable<Property> query = context.Properties;
            foreach (var includeProperty in includeProperties) {
                query = query.Include(includeProperty);
            }
            return query;
        }
}

//Property Entity
public class Property : DomainModelAuditBase, IDomainModelState
    {
        private Address _address;
        private ICollection<Asset> _assets;
        private ICollection<PropertyImage> _images;

        public Property()
        {
            _address = new Address();
            _assets = new List<Asset>();
            _images = new List<PropertyImage>();
        }

        public Guid Id { get; set; }
        [StringLength(100), Required]
        public string Title { get; set; }
        public bool IsPrimary { get; set; }
        [StringLength(255)]
        public string Description { get; set; }

        [NotMapped]
        public State State { get; set; }

        public Guid AddressId { get; set; }
        public Guid UserId { get; set; }

        public virtual Address Address
        {
            get { return _address; }
            set { _address = value; }
        }

        public virtual ICollection<Asset> Assets
        {
            get { return _assets; }
            set { _assets = value; }
        }

        public virtual User User { get; set; }

        public virtual ICollection<PropertyImage> Images
        {
            get { return _images; }
            set { _images = value; }
        }
    }

//PropertyAddress
public class Address : DomainModelAuditBase, IDomainModelState
{
    [Key,ForeignKey("Property")]
    public Guid PropertyId { get; set; }
    [StringLength(255),Required]
    public string AddressLine1 { get; set; }
    [StringLength(255)]
    public string AddressLine2 { get; set; }
    [StringLength(255)]
    public string City { get; set; }
    [StringLength(255)]
    public string StateProvince { get; set; }
    [StringLength(100)]
    public string PostalCode { get; set; }
    [StringLength(100)]
    public string Country { get; set; }

    [NotMapped]
    public State State { get; set; }

    public virtual Property Property { get; set; }

}
like image 667
Andy T Avatar asked Jan 12 '23 12:01

Andy T


1 Answers

Remove_address = new Address(); from Property constructor. You could read about similar problem here

Also are you sure that you need AddressId field in Property class?

like image 154
YuriyP Avatar answered Apr 21 '23 03:04

YuriyP