복붙노트

[SQL] 많은 관계로 많은 EntityFramework 같은 표

SQL

많은 관계로 많은 EntityFramework 같은 표

나는 분명히 제품이 포함 제품이라는 테이블이 있습니다. 그러나, 나는 관련 제품을 만들어야합니다. 그래서 나는이 한 두 가지 PK와이있는 product_related라는 접합 테이블을 만드는 것입니다. 제품 테이블에서 제품 ID, 또한 제품 테이블에서 RelatedID.

이미 EF를 사용하여 다른 테이블에있는 모든 파일을 설정했습니다. 나는 제대로 같은 제품과의 관계를 생성하기 위해이를 추가하는 방법 : product.Products.Add (여기에 제품 개체). 물론 여기 제품은 .... 내가 db.Products.FirstOr를 사용하여 DB에서 가져온했습니다하는 제품 객체를 나타냅니다

어떻게 적절하게이 작업을 수행해야합니까? 같은 테이블에 많은에 대한 많은?

감사.

해결법

  1. ==============================

    1.당신은 설정에 특정 규칙을 따르는 데이터베이스 스키마를 필요 데이터베이스 - 첫 번째 방법과 many-to-many 관계를 생성하기 위해 :

    당신은 설정에 특정 규칙을 따르는 데이터베이스 스키마를 필요 데이터베이스 - 첫 번째 방법과 many-to-many 관계를 생성하기 위해 :

    당신이 그 두 테이블에서 엔터티 데이터 모델을 생성 할 경우 지금 당신은 하나의 실체, 즉 제품 엔티티 (또는 어쩌면 제품을 사용하면 비활성화 단일화 경우)를 받게됩니다. 링크 테이블 ProductRelations은 엔티티로 노출되지 않습니다.

    제품 엔티티는 두 개의 탐색 속성을 갖습니다 :

    public EntityCollection<Product> Products { get { ... } set { ... } }
    public EntityCollection<Product> Products1 { get { ... } set { ... } }
    

    이 탐색 모음은 같은 다 대다 관계의 두 끝점입니다. 당신이 두 개의 서로 다른 테이블을 가지고 있다면 (당신은 다 대다 관계, 테이블 A와 B를 말하고, 하나 개의 탐색 모음 (학사)의 실체에있을 것입니다) 엔티티 A와 다른 (AS에있을 것 B. 그러나으로 링크 원 당신의 관계는 "자체 참조"이기 때문에 모두 탐색 속성은 엔티티 제품에 있습니다.)

    두 속성의 의미는 다음과 같습니다 : 제품이 주어진 제품과 관련된 제품은, 제품 1은 해당 제품을 참조하는 제품입니다. 예를 들어 제품이 부품을 제조하는 등의 다른 제품을 필요로하고 제품을 가지고 관계 수단이 "노트북", "프로세서"다음 "프로세서"는 "실리콘 칩"( "실리콘으로 만든"실리콘 칩 " 칩 "프로세서 제품 기업의 제품 컬렉션에서 원소이다)과에 의해 사용되는"노트 "("노트 ")는 프로세서 엔티티 제품의 제품 1 컬렉션의 원소이다. 대신 제품 및 제품 1 이름 MadeOf 및 UsedBy의 더 후 적절한 것입니다.

    당신은 단지 관계의 한 측면에 관심이 있다면 당신은 안전하게 생성 된 모델 컬렉션 중 하나를 삭제할 수 있습니다. 그냥 모델 디자이너 화면에서 예를 들어 제품 1에 대한 삭제합니다. 또한 속성의 이름을 바꿀 수 있습니다. 관계는 여전히 대다 될 것입니다.

    편집하다

    댓글에 질문 같이 코드 - 첫 번째 접근 방식 모델과 매핑은 다음과 같습니다

    모델:

    public class Product
    {
        public int ProductID { get; set; }
    
        public ICollection<Product> RelatedProducts { get; set; }
    }
    

    매핑 :

    public class MyContext : DbContext
    {
        public DbSet<Product> Products { get; set; }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Product>()
                .HasMany(p => RelatedProducts)
                .WithMany()
                .Map(m =>
                {
                    m.MapLeftKey("ProductID");
                    m.MapRightKey("RelatedID");
                    m.ToTable("product_related");
                });
        }
    }
    
  2. ==============================

    2.귀하의 예를 취할 수 있습니다 :

    귀하의 예를 취할 수 있습니다 :

    관련 테이블

      Related_id      PK
      Related_name
      Date
    

    제품 표

      Product_id      PK
      Related_id      FK
      Product_Name
      Date
    

    EF에서 그것을 표현하는 방법

    관련 모델 클래스 RelatedModel로 선정

      [Key]
      public int Related_id { get; set; }
    
      public string Related_name {get;set}
    
      public Datetime Date{get;set;}
    

    제품 모델 클래스 ProductModel로 선정

       [Key]
      public int Product_id { get; set; }
    
      public string Product_name {get;set}
    
      public string Related_id {get;set}
    
      public Datetime Date{get;set;}
    
      [ForeignKey("Related_id ")]      //We  can also specify here Foreign key
      public virtual RelatedModel Related { get; set; } 
    

    이러한 방법으로 우리는 두 테이블 사이의 관계를 만들 수 있습니다

    이제 많은 관계로 대부분의 경우에는 내가 여기에 또 다른 예를 싶습니다

    나는 모델 클래스 Enrollment.cs 있다고 가정

    public class Enrollment
    {
        public int EnrollmentID { get; set; }
        public int CourseID { get; set; }
        public int StudentID { get; set; }
        public decimal? Grade { get; set; }
        public virtual Course Course { get; set; }
        public virtual Student Student { get; set; }
    }
    

    여기 CourseID 및 StudentId 두 외국 키는

    지금은 우리가 많은 관계로 대부분을 만들 것입니다 다른 클래스 Course.cs 되세요.

    public class Course
    {
        public int CourseID { get; set; }
        public string Title { get; set; }
        public int Credits { get; set; }
        public virtual ICollection<Enrollment> Enrollments { get; set; }
    }
    

    희망이 도움이 될 것입니다!

  3. from https://stackoverflow.com/questions/12237617/entityframework-same-table-many-to-many-relationship by cc-by-sa and MIT license