2

Я пытаюсь создать список телефонов с ядром Entity Framework Core. Всякий раз, когда я пытаюсь запустить воздаем: Add-Migration "Initial"Entity Framework Core One to Many

Я получаю следующее сообщение об ошибке: Unable to determine the relationship represented by navigation property 'Member.MemberTeam' of type 'Team'. Either manually configure the relationship, or ignore this property from the model.

Вот мои модели:

public class Member { 
     public int Id { get; set; } 
     public string MemberName { get; set; } 
     public string MemberTitle { get; set; } 
     public Member MemberSupervisor { get; set; } 
     public Team MemberTeam { get; set; } 
    } 

public class Team { 
    public int Id { get; set; } 
    public string TeamName { get; set; } 
    public Member TeamSupervisor { get; set; } 
    public ICollection<Member> TeamMembers { get; set; } 
} 

Любые советы?

ответ

3

Существует несколько взаимосвязей между Team и Member и от Member до Member. Если у вас была только эта модель ...

public class Member 
{ 
    public int Id { get; set; } 
    public string MemberName { get; set; } 
    public string MemberTitle { get; set; } 
    public Team MemberTeam { get; set; } 
} 
public class Team 
{ 
    public int Id { get; set; } 
    public string TeamName { get; set; } 
    public ICollection<Member> TeamMembers { get; set; } 
} 

... EF не нуждался ни в какой помощи. Было бы понятно, что Team.TeamMembers и Member.MemberTeam являются двумя концами одной ассоциации.

Теперь, если вы только добавить ...

public Member TeamSupervisor { get; set; } 

... EF должен выбрать, если это обратный конец ассоциации один-к-одному с MemberTeam или новая ассоциация, кроме одного -to-many. Тем не менее, EF не выбирает для вас, вы должны дать ему однозначное указание, явно сопоставляя ассоциации. Например (в вашем подклассе DbContext):

protected override void OnModelCreating(ModelBuilder mb) 
{ 
    mb.Entity<Team>().Property(a => a.Id).UseSqlServerIdentityColumn(); 
    mb.Entity<Team>().HasMany(t => t.TeamMembers).WithOne(m => m.MemberTeam); 
    mb.Entity<Team>().HasOne(t => t.TeamSupervisor).WithMany() 
        .HasForeignKey("SupervisorId"); 

    mb.Entity<Member>().Property(a => a.Id).UseSqlServerIdentityColumn(); 
    mb.Entity<Member>().HasOne(m => m.MemberSupervisor).WithMany() 
         .HasForeignKey("SupervisorId"); 
} 
+0

Спасибо. Это сработало отлично. Я все еще пытаюсь изучить C# и ASP.Net. – tscrip

+0

вы также можете ответить на вопрос: «http://www.stackoverflow.com/tour My +1 :) – Sampath

+1

@Sampath Спасибо! –