2016-09-26 2 views
1

데이터베이스 첫 번째 방법으로 응용 프로그램을 작성하기 위해 Entity Framework 6.1을 사용하려고합니다.하나의 속성을 엔티티 프레임 워크와 다중 관계에 매핑하는 방법은 무엇입니까?

로컬 속성으로 기본값 KeyId을 사용하지 않는 동안 일대 다 관계를 구축하는 방법에 의아해합니다.

여기

public class UserToClient 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    [ForeignKey("ViewClient")] 
    public int ClientId { get; set; } 

    [ForeignKey("Team")] 
    public int DefaultTeamId { get; set; } 

    public bool IsActive { get; set; } 

    public virtual ViewClient ViewClient { get; set; } 
    public virtual Team Team { get; set; } 

    public virtual ICollection<Team> Teams { get; set; } 

} 

UserToClient 모델 내에서 내 두 번째 모델

public class Team 
{ 

    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    public bool IsActive { get; set; } 

    public string Name { get; set; } 

    [ForeignKey("ViewClient")] 
    public int ClientId { get; set; } 

    public virtual ICollection<ViewClient> ViewClients { get; set; } 

    public virtual UserToClient UserToClient { get; set; } 

} 

먼저 다음의 두 가지 모델이며, 한 I, I는 한 UserToClient는이 일대 관계를 "만들려면 많은 Team "

최종 결과는 다음과 같이 할 수 있습니다.

나는 "엔티티가 외부"이

SELECT * 
FROM [UserToClient] AS r 
LEFT JOIN [Team] AS t ON t.ClientId = r.ClientId 

문제 같은 것을 할 것입니다 수동으로 쿼리를 작성하는 것이었다 경우

using(var connection = new AppContext()) { var userToClients = connection.UserToClients .Include(x => x.Team) .Include(x => x.Teams) .ToList(); //Do something with userToClients //Do something with userToClients.Team //Do something with each team foreach(var team in userToClients.Teams) { //Do something with 'team' } } 

의 관계는 속성을 가리 키도록해야

ClientId하지라고 기본 키 Id.

엔티티에서 현재 이와 같은 질의를 생성 중입니다. Id에서 ClientId으로 변경하고 싶습니다.

SELECT * 
FROM [UserToClient] AS r 
LEFT JOIN [Team] AS t ON t.Id = r.ClientId 

Id 기본 키는 것을 이해하는 것이 중요하지만,이 경우에 나는 차 하나가 아닌 키에 가입하려는.

어떻게이 문제를 해결할 수 있습니까?

시도

나는이

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Team>() 

       .HasRequired(x => x.UserToClient) 
       .WithMany(x => x.Teams) 
       .HasForeignKey(f => f.ClientId); 

} 
나는 지역 때에 프로퍼티는 그 관계를 알려줄 수있는 방법이 필요

ClientId과 같은 컨텍스트 클래스의 OnModelCreating 방법을 재정 의하여이 문제를 해결하기 위해 시도 아니요 Id

어떻게 해결할 수 있습니까?

답변

0

저는 이런 상황에 대해 Fluent API를 사용하여 이러한 유형의 관계를 지정해야한다고 생각합니다. 답변과 비슷한 질문을 사용할 수 있습니다 here

+0

나는 데이터베이스를 처음 접근 방식을 사용하고 있습니다. 그러나 내 자신의 모델을 작성하여 주변 자동 생성 코드를 줄일 수 있습니다. 내가 어떻게 그럴 수 있니? – Jaylen

+0

게시 한 예는 코드 첫 번째 모델입니다. 유창한 API를 사용하여'DbContext.OnModelCreating (DbModelBuilder)'함수에서 관계를 지정합니다 – Bwolfing