2014-06-22 6 views
0

두 엔터티 간의 관계를 발전시키고 싶습니다. 두 엔티티 모두 일대일 관계를 가지고 있으며 둘 다 네비게이션 속성을 가지고있어서 엔티티에 액세스 한 다음 네비게이션 속성이있는 다른 관련 엔티티에 액세스 할 수 있습니다. 예를 보도록하겠습니다.Entity Framework 5.0의 일대일 관계 코드 첫 번째 방법

User와 UserProfile과 같은 엔티티가 있다고 가정합니다. 각 사용자에게는 하나의 프로필 만 있고 하나의 사용자 프로필에는 하나의 사용자 만 있습니다. User.UserProfile과 같은 사용자 프로필에 액세스 할 수 있으며 UserProfile.User와 같은 UserProfile에서도 User에 액세스 할 수 있습니다. 위 엔티티에서 위의 시나리오를 구현하고 솔루션을 얻지 못했습니다. 어떻게이 일을 성취 할 수 있을지 생각해보십시오. 제 방식은 엔티티 프레임 워크 코드에서 일대일 관계를 먼저 구현하는 것입니다.

1

using System;   
namespace Ioc.Core 
{ 
    public abstract class BaseEntity<T> where T: struct 
    { 
     public T ID { get; set; } 
     public DateTime AddedDate { get; set; } 
     public DateTime ModifiedDate { get; set; } 
     public string IP { get; set; } 
    } 
} 

2. 사용자 만들기 엔티티

using System;  
namespace Ioc.Core.Data 
{ 
    public class User : BaseEntity<Guid> 
    { 
     public string UserName { get; set; } 
     public string Email { get; set; } 
     public string Password { get; set; }  
    } 
} 

3. 만들기 사용자 프로필 엔티티를 기본 엔티티를 생성

using System; 
namespace Ioc.Core.Data 
{ 
    public class UserProfile : BaseEntity<int> 
    { 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public string Address { get; set; } 
     public Guid UserId { get; set; } 
     public virtual User User { get; set; } 
    } 
} 

4. 매핑 사용자는 테이블에게 내가 USERPROFILE 엔티티의 기본 키 ID를 정의 할 필요가 없다고 생각하고

using System.Data.Entity.ModelConfiguration; 
using Ioc.Core.Data; 
namespace Ioc.Data.Mapping 
{ 
    public class UserProfileMap : EntityTypeConfiguration<UserProfile> 
    { 
     public UserProfileMap() 
     { 
      //key 
      HasKey(t => t.ID); 
      //properties   
      Property(t => t.FirstName).IsRequired().HasMaxLength(100).HasColumnType("nvarchar"); 
      Property(t => t.LastName).HasMaxLength(100).HasColumnType("nvarchar"); 
      Property(t => t.Address).HasColumnType("nvarchar"); 
      Property(t => t.AddedDate).IsRequired(); 
      Property(t => t.ModifiedDate).IsRequired(); 
      Property(t => t.IP); 
      //table 
      ToTable("UserProfiles"); 
      //relation 
      HasRequired(t => t.User).WithMany().HasForeignKey(t => t.UserId).WillCascadeOnDelete(false); 
     }  
    } 
} 

을 만들

using System.Data.Entity.ModelConfiguration; 
using Ioc.Core.Data; 
namespace Ioc.Data.Mapping 
{ 
    public class UserMap :EntityTypeConfiguration<User> 
    { 
     public UserMap() 
     { 
      //key 
      HasKey(t => t.ID); 
      //properties 
      Property(t => t.UserName).IsRequired(); 
      Property(t => t.Email).IsRequired(); 
      Property(t => t.Password).IsRequired(); 
      Property(t => t.AddedDate).IsRequired(); 
      Property(t => t.ModifiedDate).IsRequired(); 
      Property(t => t.IP); 
      //table 
      ToTable("Users"); 
     } 
    } 
} 

5. 매핑 UserProfiles 테이블을 만들 수 있습니다 UserId 속성도 UserProfile 테이블의 기본 키 및 기본 키가되지만 User Profile에서 User Entity의 탐색 속성을 정의하는 방법은 무엇입니까? 이 도왔다 경우 :) 대답으로 표시하고 투표를하는 것을 잊었다 해달라고 :

답변

0

난 당신이 있지만 모델이

public class User : BaseEntity<Guid> 
    { 
     public string UserName { get; set; } 
     public string Email { get; set; } 
     public string Password { get; set; }  
     public virtual UserProfile userProfile { get; set;} 
    } 
} 
3. Create User Profile Entity 

using System; 
namespace Ioc.Core.Data 
{ 
    public class UserProfile : BaseEntity<int> 
    { 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public string Address { get; set; } 
     public Guid UserId { get; set; } 
     public virtual User User { get; set; } 
    } 
} 

참고를 할 수있는 유창한 API를 함께 할 수있는 방법을 잘 모르겠습니다

1

여기에 이것을 모델링하는 가장 좋은 방법이 있습니다. 필자는 기본 클래스 및 기타 관련이없는 구성을 정리하여 필수 : ​​필수 관계를 구성하는 방법의 핵심을 얻었습니다. 질문에서 언급했듯이 UserProfile의 기본도 User에 대한 외래 키의 두 배가됩니다.

public class User 
{ 
    public Guid UserId { get; set; } 
    public string UserName { get; set; } 
    public string Email { get; set; } 
    public string Password { get; set; } 

    public UserProfile UserProfile { get; set; } 
} 

public class UserProfile 
{ 
    public Guid UserId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Address { get; set; } 

    public virtual User User { get; set; } 
} 

public class UserProfileMap : EntityTypeConfiguration<UserProfile> 
{ 
    public UserProfileMap() 
    { 
     HasKey(p => p.UserId); 

     HasRequired(p => p.User).WithRequiredDependent(u => u.UserProfile); 
    } 
} 
관련 문제