상위 엔티티의 하위 엔티티를로드하려고하면 기본값으로로드됩니다. 명시 적으로로드하려고하면 예외가 throw됩니다. 다중도 제약 조건이 위반되었습니다입니다. 'CodeFirstNamespace.Association_Customer'관계의 'Association_Customer_Target'역할은 다중성 1 또는 0..1을가집니다. 이 예외는, 복잡한 그래프의 아이 엔티티의 취득 중에 Throw됩니다.상위 엔티티의 하위 엔티티를로드하는 데 문제가 있습니다. 단방향 매핑과 공유 기본 키와의 1 : 0..1 관계?
는 I 아이 엔티티를 0 또는 1에 하나의 관계 고객을 가지며 독립 연관를 갖는 그래프 협회있다. * 기본 키 *은 는 공유된다. 나는 EF6를 사용하고있다. 지연로드가 활성화됩니다.
public class Association
{
public virtual long Id { get; set; }
public virtual string ExternalId { get; set; }
public virtual int OrganizationId { get; set; }
public virtual AssociationType AssociationType { get; set; }
public virtual Customer Customer {get; set;}
public Association()
{
Customer = new Customer();
}
}
고객 등급. 나는 내 연결 실체로드는 내가 고객을로드하려고 할 때 아이 엔티티 고객이 기본 값으로로드 완벽하게로드 할 때
public class AssociationMapping:EntityTypeConfiguration<Association>
{
public AssociationMapping() : base()
{
HasKey(x => x.Id);
Property(x => x.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(x => x.ExternalId).IsRequired();
Property(x => x.OrganizationId).IsRequired();
Property(x => x.AssociationType);
HasOptional(x => x.Customer).WithRequired().WillCascadeOnDelete();
}
}
public class CustomerMapping : EntityTypeConfiguration<Customer>
{
public CustomerMapping():base()
{
HasKey(x => x.Id);
Property(x => x.Id);
HasMany(x => x.Items)
.WithOptional()
.HasForeignKey(key => key.CustomerId)
.WillCascadeOnDelete();
HasMany(x => x.Complaints)
.WithOptional()
.HasForeignKey(key => key.CustomerId)
.WillCascadeOnDelete();
}
}
명시 적으로 예외를 throw :
public class Customer
{
public virtual long Id { get; set; } //Shared primary key
public virtual ICollection<Item> Items {get; set;}
public virtual ICollection<Complaint> Complaints {get; set;}
public customer()
{
Items = new List<Item>();
Complaints = new List<Complaint>();
}
}
매핑 유니 방향이다.
var dbassociation = Single<Association>(x => x.OrganizationId== asso.organizationId && x.ExternalId == asso.ExternalId && x.AssociationType == asso.AssociationType);
dbassociation.Customer = Single<Customer>(x => x.id == dbassociation.id);
[업데이트 : 단일 방법] 내가 연관 클래스의 고객 속성에 가상 제거하여 열망 부하에 노력하고 다음 시도 테스트 목적으로
public TEntity Single<TEntity>(System.Linq.Expressions.Expression<Func<TEntity, bool>>criteria) {
return Context.Set<TEntity>().SingleOrDefault(criteria); }
하지만 같은 excepetion가 발생합니다
Context.Configuration.LazyLoadingEnabled = false;
Context.Entry<Association>(dbassociation).Reference<Customer>(pa => pa.Customer).Load();
동일한 예외가 발생했습니다.
var dbassociation = Context.Set<Association>().Include("Customer").SingleOrDefault(x => x.OrganizationId== asso.organizationId && x.ExternalId == asso.ExternalId && x.AssociationType == asso.AssociationType);
이제 예외를 검색하는 여러 가지 방법을 사용하지만 동일하다는 결론에 도달했습니다. 문제는 내가 추측하는 매핑입니다. 귀하의 의견과 제안에 감사드립니다.
'협회'와 '고객'의 관계는 정확히 무엇입니까? 1 : 1, 일대 다 등인가요? 어떤 테이블에 FK 참조가 있습니까? – IronMan84
나는 그것이 1 : 0..1이라는 것을 이미 언급했다. 1 차 키는 협회와 고객 사이에 공유된다. 고객이 fk 참조를 가지고 있습니다. – Mady
네비게이션 속성에서'virtual' 키워드를 제거한다고해서 열렬한로드가 이루어지는 것은 아닙니다. – haim770