0
  • 火鸟2.5
  • 实体框架5
  • FirebirdClientDll 3.0.0.0

嗨,我(还)试图与访问我的遗产数据库实体框架(Code First)。实体Framwork代码第一次 - 加入合成引导

现在我想创建一个没有Forrein Key的一对一关系。

public class KONTAKTE 
{ 
    public int KUNDENNR { get; set; } 
    public Int16 ANSPRNR { get; set; } 
    public Int16 NR { get; set; } 

    public virtual ICollection<KONTAKTBED> KONTAKTBED { get; set; } 
} 
public class KONTAKTBED 
{ 
    public int ID { get; set; } 

    public Int16 LFDNR { get; set; } 
    public int KUNDENNR { get; set; } 
    public Int16 ANSPRNR { get; set; } 

    public string NAME { get; set; } 
} 

公共类CTKontakt:的DbContext {

public DbSet<KONTAKTE> KONTAKTE { get; set; } 
    public DbSet<KONTAKTBED> KONTAKTBED { get; set; } 

    public CTKontakt(DbConnection connectionString) : base(connectionString, false) 
    { 
     Database.SetInitializer<CTKontakt>(null); 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 

     /* modelBuilder.Entity<KONTAKTE>(). 
     HasMany(p => p.KONTAKTBED). 
     WithMany(). 
     Map(t => t.MapLeftKey("KUNDENNR", "NR") 
      .MapRightKey("KUNDENNR", "LFDNR"));*/ //Does't work 

     modelBuilder.Entity<KONTAKTE>().HasKey(a => new { a.KUNDENNR, a.ANSPRNR, a.NR });  
     modelBuilder.Entity<KONTAKTBED>().HasKey(a => new { a.ID, a.DATABASE_ID}); 

     base.OnModelCreating(modelBuilder); 
    } 

正如你可以看到我不能使用KONTAKTE表的整个主键。这是否意味着我必须实现多对多的现实?目前,我刚刚加入表后:

from k in lEKontakt.KONTAKTE 
join kbed in lEKontakt.KONTAKTBED 
on new { KUNDENNR = k.KUNDENNR, NR = k.NR } 
equals new { KUNDENNR = kbed.KUNDENNR, NR = kbed.LFDNR } 

我想要做这样的事情:

modelBuilder.Entity<KONTAKTE>() 
.HasKey(d => new { d.KUNDENNR, d.ANSPRNR, d.NR }) 
.HasMany(d => d.KONTAKTBED) 
.WithOptional() 
.HasForeignKey(l => new { l.KUNDENNR, l.ANSPRNR, l.LFDNR }); 

但是,如果没有ANSPRNR ...

我还是新的EF-码首先,我发现所有样本似乎没有下EF 5工作...

回答

1

我找到了我一个解决方案:

它semms我只需要删除未使用的字段的主键定义。我仍然可以读取没有它的数据:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 

     modelBuilder.Entity<KONTAKTE>() 
      .HasRequired(b => b.KUNDEN) 
      .WithMany() 
      .HasForeignKey(b => b.KUNDENNR); 

     modelBuilder.Entity<KONTAKTE>() 
     .HasKey(d => new { d.KUNDENNR, d.NR }) 
     .HasMany(d => d.KONTAKTBED) 
     .WithOptional() 
     .HasForeignKey(l => new { l.KUNDENNR, l.LFDNR }); 

     modelBuilder.Entity<KONTAKTE>().HasKey(a => new { a.KUNDENNR, a.NR });  

     modelBuilder.Entity<KUNDEN>().HasKey(a => new { a.KUNDENNR }); 

     modelBuilder.Entity<KONTAKTBED>().HasKey(a => new { a.ID, a.DATABASE_ID}); 

     base.OnModelCreating(modelBuilder); 
    } 
相关问题