아래처럼 보이는 클래스를 매핑하려고하지만 인터페이스 인 Facility.Projects 속성과 관련하여 예외가 발생합니다.명시 적으로 Entity Framework 7의 인터페이스 멤버 매핑
Facility.Projects 속성은 IProject 인터페이스 유형입니다. 탐색 속성 인 경우 매핑 된 엔터티 형식으로 캐스팅하여이 속성의 관계를 수동으로 구성하거나 그렇지 않으면 모델에서 속성을 무시합니다.
public class Facility : BaseData
{
[ForeignKey("ClientId")]
public Client Owner { get; set; }
public List<IProject> Projects { get; protected set; }
public Facility()
{
Initialize();
}
private void Initialize()
{
Projects = new List<IProject>();
}
}
나는 Facility
가 맵핑되는 DbContext 클래스의 OnModelCreating
방법을 통해 다른 속성을 매핑 적이 있지만 정말 HasColumnType
보다이 다른 캐스팅 정확한 지점처럼 보인다 아무것도 보이지 않아요도있는 잘못된 것 같습니다.
public class FacilityRepository : BaseRepository<Facility>, IFacilityRepository
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder
.Entity<Client>()
.Property(f => f.Id)
.ForSqliteHasColumnName("ClientId");
modelBuilder
.Entity<Project>()
.Property(x => x.Id)
.ForSqliteHasColumnName("ProjectId");
// area where I've tried and failed to find a good spot to do some manual casting
modelBuilder
.Entity<Facility>()
.Property(f => f.Projects)
.HasColumnType<Project>(new PropertyBuilder());
}
}
누구나 올바른 방향으로 나를 가리킬 수 있습니까? 설명서에 도움이 될만한 것을 본 적이 없습니까? 또는 규칙에 따라, 나는 이것을 전혀하지 않아야합니까?
필요한 정확한 유형을 알고있는 이유는 여기에서 인터페이스를 사용하는 이유는 무엇입니까? 'Projects' 속성을'List' –
DavidG
으로 변경하십시오. 솔직히, @DavidG가 완료 될 수 있는지를 알기 만하면됩니다. 나는 아직도 이것에 붙어있는 컨텍스트의 나머지 부분을 만들고 있는데, 나는 정확한 타입을 모르는 경우를 보게 될 것이라고 확신한다. 할 수 없다면, 될 수 없다. done (이 경우에도 방법을 찾을 수있을 것입니다) - 큰 것을 놓친다는 것을 알지 못했습니다. – prestonsmith
아주 좋은 이유가 있습니다. 저장소로 인터페이스를 설계 한 경우 귀하의 비즈니스 로직, 예를 들어, 실제로 정상적으로하고 좋은 일을해야합니다. 당신이 이미 그것을 발견하지 않는 한 여기에 답변을 찾고 갈거야.) – Arwin