최근에 EF Reverse Engineer Code First를 사용하여 기존 데이터베이스를 코드로 변환했습니다. 대부분의 결과를 연마 한 후에 테스트를 쓰기 시작했습니다. 현재 가지고있는 오류는 'Element_ElementCode'라는 열 이름에 액세스하려고 시도하지만 해당 열은 없습니다.
필자는 실수로이를 선언 할 가능성을 피하기 위해 전체 프로젝트를 검색했습니다.SQLException : 잘못된 열 이름
System.Data.SqlClient.SqlException: Invalid column name 'Element_ElementCode'.
잘못된 열 이름 'Element_ElementCode는'반복되는 10 ~ 15 번과 스택 트레이스가 어떤 단서를 제공하지 않습니다 다음과 같이
Find all "Element_ElementCode", Subfolders, Find Results 1, Entire Solution, ""
Matching lines: 0 Matching files: 0 Total files searched: 120
정확한 오류입니다.
이 예외는 데이터를 검색하는식이 포함 된 테스트를 실행하고 일부식이를 수행 할 때 발생합니다.
Element
(Element.cs
내부) 다음과 같은 필드가 있습니다 :
var doos = (dbContext.Elementen.Where(d => d.ElementCode == "DOOS9001")).FirstOrDefault();
이
는 SQL 서버 자체에서 쿼리의 결과ElementCode
Doelgroep
Type
Omschrijving
Titel
요소는 다음과 같이 매핑됩니다 :
를public class ElementenMap : EntityTypeConfiguration<Element> {
public ElementenMap() {
// Primary Key
this.HasKey(t => t.ElementCode);
// Properties
this.Property(t => t.ElementCode)
.IsRequired()
.HasMaxLength(255);
this.Property(t => t.Type)
.HasMaxLength(31);
this.Property(t => t.Doelgroep)
.HasMaxLength(255);
this.Property(t => t.Omschrijving)
.HasMaxLength(255);
this.Property(t => t.Titel)
.HasMaxLength(255);
// Table & Column Mappings
this.ToTable("Elementen");
this.Property(t => t.ElementCode).HasColumnName("ElementCode");
this.Property(t => t.Type).HasColumnName("Type");
this.Property(t => t.Doelgroep).HasColumnName("Doelgroep");
this.Property(t => t.Omschrijving).HasColumnName("Omschrijving");
this.Property(t => t.Titel).HasColumnName("Titel");
// Relationships
this.HasMany(t => t.Kernwoorden)
.WithRequired(t => t.Element)
.Map(m => m.ToTable("Kernwoorden"));
}
}
더 : 나는 동일한 데이터베이스 내의 다른 테이블에 대한 다른 테스트가 성공하기 때문에 데이터베이스에 액세스했는지 확신합니다.
가능한 한 많은 관련 정보를 제공하려고 노력했지만 소스를 잊어 버린 경우 알려 주시기 바랍니다. Element_ElementCode
이라는 열에 액세스하려는 이유는 무엇입니까? 아마도 잊어 버린 국제 대회 (이미 PluralizingTableNameConvention를 해제해야했습니다)입니까?
어떤 방향으로 이걸 찾아야합니까?
편집 :
Kernwoord.cs
public class Kernwoord {
public string ElementCode { get; set; }
public string KernwoordString { get; set; }
public virtual Element Element { get; set; }
}
Element.cs
public partial class Element {
public Element() {
this.LeertrajectElementen = new List<LeertrajectElement>();
this.Kernwoorden = new List<Kernwoord>();
}
public string ElementCode { get; set; }
public string Type { get; set; }
public string Doelgroep { get; set; }
public string Omschrijving { get; set; }
public string Titel { get; set; }
public virtual Casus Casus { get; set; }
public virtual Document Document { get; set; }
public virtual Doos Doos { get; set; }
public virtual ICollection<LeertrajectElement> LeertrajectElementen { get; set; }
public virtual StellingenSpel StellingenSpel { get; set; }
public virtual ICollection<Kernwoord> Kernwoorden { get; set; }
}
LeertrajectElementenMap.cs는 니펫을 :
this.HasRequired(t => t.Element)
.WithMany(t => t.LeertrajectElementen)
.HasForeignKey(d => d.ElementCode);
편집 : 문제는 기존의 상속 문제를 해결함으로써 해결되었다
.
을 (t => t.ElementCode)이 있어야한다. HasColumnName ("ElementCode"); 및 .Map (m => m.ToTable ("Kernwoorden"));'. 나는 모든 '수동'이름 지정 (어쨌든 모두 동일 함)을 삭제하고 w/o 시도하도록 제안합니다. 당신은 너무 많은 일을하고 있습니다. EF를 혼란스럽게합니다. – NSGaga
별다른 차이는 없지만 아래의 설명에 나와있는 것과 비슷한 (그러나 여전히 해결책은 아닙니다) 것으로 조정했습니다. 이것이 EF에 의해 자동 생성된다는 것을주의하십시오, 혼동해서는 안됩니다! –
우리가 빨리 테스트 할 수있는 전체 모델을 가지고있는 것이 더 쉬울 것입니다. – NSGaga