Entity Framework 개인 속성 매핑

이 글은 순전히 스스로 즐기는 것이다. 왜냐하면 실제 개발에서 사유화 속성을 사용하여 비추는 가능성은 거의 0이기 때문이다.EF에서 기본적으로 비치는 것은public 수식자의 속성이지만 인터넷,private,protected 수식의 속성이 데이터베이스에 비치면 어떻게 합니까?다음은 우리가 각각 설명해 드리겠습니다.

제로, 인터넷 속성 매핑


저희가 먼저 코드 실체 클래스 코드를 만들게요.
{
    public int Id { get; set; }
    public string Name { get; set; }
    internal int Age { get; set; }
}

위의 엔티티 클래스 코드에서 볼 수 있는 Age 속성의 수정자는 internal이고 EF는 Age 속성을 매핑하지 않으며 EF가 매핑하려면 지정된 매핑을 표시해야 합니다.코드는 다음과 같습니다.
public class UserMap : EntityTypeConfiguration
{
    public UserMap()
    {
        ToTable("User");
        HasKey(p => p.Id);

        Property(p => p.Age);
    }
}

위 코드Property(p => p.Age);에는 지정된 Age 속성 매핑이 표시되며 행 코드를 제거하면 EF에서 Age 속성을 데이터베이스에 매핑하지 않습니다.

1. private와 보호된 속성 맵


private와 보호된 속성을 비추려면 일부 클래스가 필요합니다.우리는 앞의 실체 클래스를 수정할 것이다.
public partial class User
{
   public int Id { get; set; }
   public string Name { get; set; }
   private int Age { get; set; }
}

위 코드는 클래스에 partial 키워드를 추가했습니다. (이 키워드는 부분 클래스 키워드입니다.) 그리고 Age 속성의 수식자를 private로 수정했습니다. 다음은 Age 속성을 어떻게 비추는지 보겠습니다.
  • 먼저 User의 부분 클래스를 정의합니다:
  • public partial class User
    {
        public class PrivatePropertyExtension
        {
            public static readonly Expression> expression =
                p => p.Age;
        }
    }
  • 그리고 UserMap 클래스에 다음 코드를 추가합니다.
  • Property(User.PrivatePropertyExtension.expression);

    코드가 완료되면 Age 속성이 매핑됩니다.보호된 속성은 동일합니다.물론 위의 두 번째 방법도 EF의 API를 사용하여 실현할 수 있다. 우리는 상하문 파생 클래스의 OnModelCreating에서 모든 비공식적인 속성을 데이터베이스에 비추도록 설정해야 한다.
    modelBuilder.Types().Configure(p =>
    {
        var noPublic = p.ClrType.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance);
        foreach(var d in noPublic)
        {
            p.Property(d).HasColumnName(d.Name);
        }
    });

    좋은 웹페이지 즐겨찾기