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); 
    } 
相關問題