I was able to put navigation property between two UniData Tables. I have used Composite Key/Foreign Key. Is this your requirement?
See Example below.
I have used the following:
U2 Database
- UniData 7.3
- Demo account with STUDENT_NF_SUB and STUDENT_CGA_MV_SUB tables
- Demo account is normalized with VSG
Microsoft
- Visual Studio 2012 Update 4
- .NET Framework 4.5
- Entity Framework 5.0 (Install-Package Entity Framework -Version 5.0.0)
- Code First Model
- WinFrom App
UniData Table in Server Explorer
See below Unidata tables in Visual Studio 2012’s Server Explore.
Model and DbContext Code
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 App to call the Code First with Navigation Property
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);
}
}
Run the App