2014-01-17 2 views
0

먼저 엔티티 프레임 워크 코드를 사용하고 데이터를 가져 오기 위해 테이블에 우리의 유니 데이터 파일을 매핑하고 있습니다. 테이블에 가입하거나 탐색 속성을 사용하고 싶습니다. 2 개의 테이블은 WorkInProgressOperationId라는 공통 필드를 공유합니다. 조인 및 탐색 속성을 사용해 보았지만 unidata 파일에 매핑 할 때 작동하지 않는 것 같습니다. 가능한가요?테이블/파일 병합

 public class WorkInProgressMapping : EntityTypeConfiguration<WorkInProgress> 
{ 

    public WorkInProgressMapping() 
    {   
     this.ToTable("WIPMASTER"); 
     this.HasKey(e => e.WorkInProgressId).Ignore(e => e.EntityId);   
     this.Property(e => e.WorkInProgressId).HasColumnName("@ID"); 
     this.Property(e => e.SequenceNumber).HasColumnName("OPER_SEQ_NBR"); 
     this.Property(e => e.WorkOrderNumber).HasColumnName("WORK_ORDER"); 
     this.Property(e => e.StartQuantity).HasColumnName("SCHED_COMP_QTY"); 
     this.Property(e => e.JobNumber).HasColumnName("JOB_NBR"); 
     this.Property(e => e.JobDetailId).HasColumnName("JOBDET_ID"); 
     this.Property(e => e.ComputerGeneratedNumber).HasColumnName("CPN"); 
     this.Property(e => e.ItemNumber).HasColumnName("ITEM_NBR"); 
     this.Property(e => e.ParentWorkOrder).HasColumnName("PARENT_WO"); 
     this.Property(e => e.ParentDueDate).HasColumnName("SCHED_COMP_DATE"); 
     this.Property(e => e.WorkOrderIssueDate).HasColumnName("RELEASE_DATE"); 
     this.Property(e => e.WorkInProgressOperationId).HasColumnName("WIPOPERACT_ID"); 
    } 
} 

     public class WorkInProgressOperationMapping : EntityTypeConfiguration<WorkInProgressOperation> 
{ 

    public WorkInProgressOperationMapping() 
    { 
     this.ToTable("WIPOPER"); 
     this.HasKey(e => e.WorkInProgressOperationId).Ignore(e => e.EntityId); 
     this.Property(e => e.WorkInProgressOperationId).HasColumnName("@ID"); 
     this.Property(e => e.OperationNumber).HasColumnName("OPERATION_NBR"); 
     this.Property(e => e.OperationSequence).HasColumnName("OPER_SEQ"); 
     this.Property(e => e.WorkOrder).HasColumnName("WORK_ORDER"); 
     this.Property(e => e.NextSequence).HasColumnName("NEXT_SEQ"); 
     this.Property(e => e.Status).HasColumnName("OPER_STATUS"); 
     this.Property(e => e.QuantityComplete).HasColumnName("QTY_COMPLETE"); 
     this.Property(e => e.SalesOrderDeliveryDate).HasColumnName("DUE_SO"); 
     this.Property(e => e.WorkOrderDeliveryDate).HasColumnName("WO_DUE"); 
     this.Property(e => e.StartingQuantity).HasColumnName("EXP_START_QTY"); 

    } 
} 
+0

우리는 Unidata "학생이있다. cs "코드 우선 클래스. 너 그거 해봤 니? U2 Toolkit for .NET v1.3.0은 Entity Framework 6.0을 지원하지 않습니다. EF 6.0을 사용하여 개발 중입니까? 이 클래스는 EF 6.0에 대해서만 "EntityTypeConfiguration"입니까? 예를 들어 주시겠습니까? 나는 우리의 '데모'Unidata 계정으로 시뮬레이션을 시도 할 것이다.귀하의 예제로 코드를 디버깅해야합니다. 코드를 [email protected]으로 보내주십시오. Rajan Kumar –

+0

이 이메일에 오류 및 로그 파일을 보내주십시오 : [email protected] –

답변

0

또 다른 예 : 한 많은 관계로 (U2 테이블/파일)와

using System; 
using System.Collections.Generic; 
using System.Data.Entity; 
using System.Data.Entity.ModelConfiguration; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Test_EF5 
{ 


    public class Customer 
    { 
     public string CustomerID { get; set; } 
     public string FirstName { get; set; } 

     public virtual ICollection<Rental> Rentals { get; set; } 
    } 

    public class Rental 
    { 
     public string RentalID { get; set; } 
     public string CustomerID { get; set; } 
     public decimal Balance { get; set; } 
     public virtual Customer Customer { get; set; } 
    } 

    public class CustomerMapping : EntityTypeConfiguration<Customer> 
    { 
     public CustomerMapping() 
     { 
      this.ToTable("MEMBERS"); 
      this.Property(e => e.CustomerID).HasColumnName("MEMBERS_PK"); 
      this.Property(e => e.FirstName).HasColumnName("FIRST_NAME"); 
      this.HasKey(e => e.CustomerID); 
     } 

    } 

    public class RentalMapping : EntityTypeConfiguration<Rental> 
    { 
     public RentalMapping() 
     { 
      this.ToTable("RENTAL_DETAILS"); 
      this.Property(e => e.RentalID).HasColumnName("RENTAL_DETAIL_PK"); 
      this.Property(e => e.Balance).HasColumnName("BALANCE.DUE"); 
      this.Property(e => e.CustomerID).HasColumnName("CUSTOMER.CODE"); 


      this.HasKey(e => new { e.RentalID }); 
      HasRequired(p => p.Customer) 
       .WithMany(b => b.Rentals) 
       .HasForeignKey(p => new { p.CustomerID }); 

     } 

    } 

    public class CustomerContext : DbContext 
    { 
     public CustomerContext() 
     { 

     } 
     public DbSet<Customer> Customers { get; set; } 
     public DbSet<Rental> Rentals { get; set; } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      base.OnModelCreating(modelBuilder); 
      modelBuilder.Configurations.Add(new CustomerMapping()); 
      modelBuilder.Configurations.Add(new RentalMapping()); 

     } 
    } 
} 
0

두 UniData 테이블간에 탐색 속성을 넣을 수있었습니다. Composite Key/Foreign Key를 사용했습니다. 이게 당신의 요구 사항입니까?

아래 예를 참조하십시오.

내가 다음 사용한 : STUDENT_NF_SUB 및 STUDENT_CGA_MV_SUB 테이블

U2 데이터베이스

  • UniData 7.3
  • 데모 계정을
  • 데모 계정은 VSG

마이크로 소프트와 정규화

비주얼 스튜디오 2012 업데이트 4
  • .NET 프레임 워크 4.5
  • 엔티티 프레임 워크 5.0 (설치 패키지 엔티티 프레임 워크 -Version 5.0.0)
  • 코드 첫 번째 모델
  • WinFrom 앱
    • 서버 탐색기의 UniData 테이블

      아래를 참조하십시오. Visual Studio 2012 서버의 Unidata 테이블 탐색을 참조하십시오. 앱

      RunApp.png

      ,536를 실행 탐색 속성으로
      private void button1_Click(object sender, EventArgs e) 
           { 
            try 
            { 
             Database.SetInitializer<StudentContext>(null); 
             StudentContext ctx = new StudentContext(); 
             var r = ctx.Students.ToList(); 
             foreach (var item in r) 
             { 
              this.textBox1.AppendText("ID="+item.StudentID+" FNAME=" + item.FirstName +" LNAME="+ item.LastName +Environment.NewLine); 
      
              foreach (var item2 in item.Semesters) 
              { 
               this.textBox1.AppendText("\t ID="+item2.StudentID + " Semester="+item2.Semester +" CompositeKey="+ item2.CompositeKey +Environment.NewLine); 
              } 
             } 
            } 
            catch (Exception e4) 
            { 
             string lErr = e4.Message; 
             this.textBox1.AppendText(lErr); 
            } 
      
           } 
      

      을 코드 먼저 호출

      SE.png

      모델 및 DbContext 코드

      using System; 
      using System.Collections.Generic; 
      using System.Data.Entity; 
      using System.Data.Entity.ModelConfiguration; 
      using System.Linq; 
      using System.Text; 
      using System.Threading.Tasks; 
      
      namespace Test_EF5 
      { 
          public class Student 
          { 
           public string StudentID { get; set; } 
           public string FirstName { get; set; } 
           public string LastName { get; set; } 
           public virtual ICollection<StudentSemester> Semesters { get; set; } 
          } 
      
          public class StudentSemester 
          { 
           public string StudentID { get; set; } 
           public string Semester { get; set; } 
           public int CompositeKey { get; set; } 
           public virtual Student Student { get; set; } 
          } 
          public class StudentMapping : EntityTypeConfiguration<Student> 
          { 
           public StudentMapping() 
           { 
            this.ToTable("STUDENT_NF_SUB"); 
            this.Property(e => e.StudentID).HasColumnName("ID"); 
            this.Property(e => e.FirstName).HasColumnName("FNAME"); 
            this.Property(e => e.LastName).HasColumnName("LNAME"); 
            this.HasKey(e => e.StudentID); 
           } 
      
          } 
      
          public class StudentSemesterMapping : EntityTypeConfiguration<StudentSemester> 
          { 
           public StudentSemesterMapping() 
           { 
            this.ToTable("STUDENT_CGA_MV_SUB"); 
            this.Property(e => e.StudentID).HasColumnName("ID"); 
            this.Property(e => e.Semester).HasColumnName("SEMESTER"); 
            this.Property(e => e.CompositeKey).HasColumnName("CGA_MV_KEY"); 
            this.HasKey(e => new { e.StudentID, e.CompositeKey }); 
      
           } 
      
          } 
          public class StudentContext : DbContext 
          { 
           public StudentContext() 
           { 
      
           } 
           public DbSet<Student> Students { get; set; } 
           public DbSet<StudentSemester> StudentSemesters { get; set; } 
      
           protected override void OnModelCreating(DbModelBuilder modelBuilder) 
           { 
            base.OnModelCreating(modelBuilder); 
            modelBuilder.Configurations.Add(new StudentMapping()); 
            modelBuilder.Configurations.Add(new StudentSemesterMapping()); 
      
           } 
          } 
      } 
      

      의 WinForm 응용 프로그램

    +0

    샘플 코드는 Rajan에게 감사드립니다. 나는 오늘 이것을 시도 할 것이다. –

    +0

    Rajan.My Uidata 파일 "WIPMASTER"에는 "WIPOPERACT"라는 필드가 있으며 "WIPOPER"파일의 ID에 해당하며 "WIPOPER"파일에는 "WIPMASTER"파일에 해당하는 "WORK_ORDER"필드가 있습니다 .CAN 나는이 두 테이블과 많은 "WIPOPERS"관계에 대해 "WIPMASTER"를 가지고 있습니까? 그렇다면 어떻게 맵핑합니까? –

    +0

    네, 가능하다고 생각합니다. HasRequired(), WithMany() 및 HasForeignKey()를 사용하면 WIPMASTER 대 WIPOPERS를 여러 개 만들 수 있습니다. 클래스 WorkInProgressOperationMapping에 다음 행을 추가하고 다시 시도해 주시겠습니까? HasKey (e => 새 {e. WorkInProgressOperationId}); HasRequired (p => p. WorkInProgress) .WithMany (b => b. WorkInProgressOperation) .HasForeignKey (p => 새로운 {p. WORK_ORDER}); –

    0

    열망로드 포함() 함수 (설치시 제공) 우리의 예에서

    private void button3_Click(object sender, EventArgs e) 
         { 
    
    
          try 
          { 
           Database.SetInitializer<CustomerContext>(null); 
           CustomerContext ctx = new CustomerContext(); 
           var r = ctx.Customers.Include("Rentals").ToList(); 
           foreach (var item in r) 
           { 
            this.textBox1.AppendText("ID=" + item.CustomerID + " FNAME=" + item.FirstName + Environment.NewLine); 
            int k = 0; 
            foreach (var item2 in item.Rentals) 
            { 
             this.textBox1.AppendText("\t ID=" + item2.RentalID + " CustomerID=" + item2.CustomerID + " Balance=" + item2.Balance + Environment.NewLine); 
    
            } 
           } 
    
           int y = 0; 
          } 
          catch (Exception e4) 
          { 
           string lErr = e4.Message; 
           this.textBox1.AppendText(lErr); 
          } 
    
         }