레거시 데이터베이스에 대한 CodeFirst EF4.1 MVC-다중성 충돌
어떤 방식으로 혼합해도 오류가 발생합니다. 이러한 오류가 계속 발생하면서 명백한 것을 놓치고 있다는 느낌이 듭니다.
모델 생성 중에 하나 이상의 유효성 검사 오류가 감지되었습니다.
System.Data.Edm.EdmAssociationType : : 'Venue_Courses'관계에서 'Venue_Courses_Source'역할의 참조 제약 조건과 다중성이 충돌합니다. 종속 역할의 모든 속성은 Null을 허용하지 않으므로 주 역할의 다중성은 '1'이어야합니다.
System.Data.Edm.EdmAssociationEnd : : 'Venue_Courses'관계의 'Venue_Courses_Target'역할에서 다중성이 유효하지 않습니다. 종속 역할은 키 속성을 참조하기 때문에 종속 역할의 다중성의 상한은 1이어야합니다.
코스는 하나의 장소 만 가질 수 있으며 여러 코스에서 장소를 사용할 수 있습니다.
public class Course
{
[Key]
public virtual int Id { get; set; }
public string Title { get; set; }
public DateTime StartDate { get; set; }
public int VenueId { get; set; }
public virtual Venue Venue { get; set; }
}
public class Venue
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Course> Courses { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
#region Courses
//Table Alias
modelBuilder.Entity<Course>().ToTable("DBSCHEMA.TR_COURSES");
//Keys
modelBuilder.Entity<Course>().HasKey(c => c.Id);
//Joins
//Join to Venues
modelBuilder.Entity<Course>().HasOptional(c => c.Venue);
//Fields
modelBuilder.Entity<Course>().Property(c => c.Id).HasColumnName("COURSE_ID");
modelBuilder.Entity<Course>().Property(c => c.Title).HasColumnName("CR_TITLE");
modelBuilder.Entity<Course>().Property(c => c.StartDate).HasColumnName("START_DATE");
modelBuilder.Entity<Course>().Property(c => c.VenueId).HasColumnName("VENUE_ID");
#endregion
#region Venues
//Table Alias
modelBuilder.Entity<Venue>().ToTable("DBSCHEMA.VENUES");
//Keys
modelBuilder.Entity<Venue>().HasKey(v => v.Id);
//Joins
modelBuilder.Entity<Venue>().HasMany(venue => venue.Courses);
//Fields
modelBuilder.Entity<Venue>().Property(v => v.Id).HasColumnName("VENUE_ID");
modelBuilder.Entity<Venue>().Property(v => v.Name).HasColumnName("VENUE_NAME");
#endregion
}
아직 제 시간에 도움이되기를 바랍니다. 나는 또한 똑같은 문제를 겪고 있었고 실수를 발견 할 때까지 거의 한 시간 동안 문제를 겪었습니다.
문제는 Course.Venue
관계가 선택 사항 (유창한 API에 선언 된대로)이지만의 Id 선언 Course.VenueId
은 필수이므로 VenueId를 다음으로 변경하여 선택 사항으로 만들 수 있습니다.
public int? VenueId { get; set;}
또는 유창한 API에서 관계를 필수로 변경하면 OnModelCreating이 정상적으로 실행됩니다.
웹 검색 후
System.Data.Edm.EdmAssociationType : : 역할의 참조 제약 조건과 다중성이 충돌합니다.
이 게시물과 계속해서 나왔으므로 여기에 내 문제와 해결책이 있습니다.
I upgraded a large project from ef4.0 to ef4.1 using the vs ef reverse engineering extension. Our mvc app was using metadatatype and partials to decorate ef4.0 objects.
After removing the files of the metadatatype the project began working.
The root problem was [Required] attribute as ef poco object had nullable and my metadatatype had [Required] on the same property. Previously was to enforce mvc validation rules and now ef4.1 was using to populate navigation properties. Removing [Required] off metadatatype fixed the problem.
public partial class AgentAgency
{
public long OID { get; set; }
public long? AgentOID { get; set; }
public long? AgencyOID { get; set; }
public string ReinsuranceYear { get; set; }
public virtual Agency Agency { get; set; }
public virtual Agent Agent { get; set; }
}
public class AgentAgencyMetadata
{
public Int64 OID { get; set; }
[Required]
public Int64 AgentOID { get; set; }
[Required]
public Int64 AgencyOID { get; set; }
}
i 've struggled with this error in my entity framework project, i've solved the problem by changing nullable value of VenueId.
Make sure you don't use HasKey() in combination with HasOptional() in your mappings. That was causing this error in my case.
ReferenceURL : https://stackoverflow.com/questions/8007129/codefirst-ef4-1-mvc-against-legacy-database-multiplicity-conflicts
'programing' 카테고리의 다른 글
Ajax 호출이 Selenium 2 WebDriver로 완료 될 때까지 기다립니다. (0) | 2021.01.17 |
---|---|
파일 이름에서 이미지 크기를 얻는 방법 (0) | 2021.01.17 |
자바 스크립트에서 순간 (moment.js) 이상을 수행하는 방법은 무엇입니까? (0) | 2021.01.17 |
Pandas DataFrame에서 빈 셀을 포함하는 행 삭제 (0) | 2021.01.17 |
boost :: disjoint_sets 이해 (0) | 2021.01.16 |