2012-09-18 17 views
1

我在傳統數據庫中具有以下表格。映射表關係w /只有主鍵從現有數據庫到實體框架對象

數據 數據ID PK, 年, 數

_1 數據ID PK, note_1, 完成

_2 數據ID PK, note_2, 類型, 對象

data_other 數據ID PK, note_other, 一個, B, Ç

我的模型類看起來像;

public class Data 
{ 
    public int DataID { get; set; } 
    public int Year { get; set; } 
    public int Number { get; set; } 
} 

public class Data1 
{ 
    public int DataID { get; set; } 
    public int Note1{ get; set; } 
    public int Completed { get; set; } 
} 

public class Data1 
{ 
    public int DataID { get; set; } 
    public int Note2 { get; set; } 
    public string Type { get; set; } 
    public string Object { get; set; } 
} 

public class DataOther 
{ 
    public int DataID { get; set; } 
    public int NoteOther { get; set; } 
    public string A { get; set; } 
    public string B { get; set; } 
    public string C { get; set; } 
} 
public DbSet<Data> Datas { get; set; } 
    public DbSet<Data1> Data1s { get; set; } 
    public DbSet<Data2> Data2s { get; set; } 
    public DbSet<DataOther> DataOthers { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
      modelBuilder.Entity<Data>().ToTable("data"); 
      modelBuilder.Entity<Data>().HasKey(t => t.DataID); 

      modelBuilder.Entity<Data1>().ToTable("data_1"); 
      modelBuilder.Entity<Data1>().HasKey(t => t.DataID); 

      modelBuilder.Entity<Data2>().ToTable("data_2"); 
      modelBuilder.Entity<Data2>().HasKey(t => t.DataID); 

      modelBuilder.Entity<DataOther>().ToTable("data_other"); 
      modelBuilder.Entity<DataOther>().HasKey(t => t.DataID); 
    } 

我從教程和博客想盡了各種辦法,但我似乎無法做到這一點,

modelBuilder.Entity<Data>() 
    .HasRequired(a => a) 
    .WithMany() 
    .HasForeignKey(a => a); 

的問題,因爲我看到的是,我們只有主鍵和沒有外鍵。我使用MVC3和實體框架5.我想要的只是在例如視圖@ Model.Datas.Others.NoteOther其他

但我如何可以創建這些表之間的關係的任何提示是偉大的!

+0

有沒有一些原因,你沒有生成th數據庫中的e模型? – podiluska

+0

如果您使用Database-First,則可以將關聯添加到模型中 - 您只需要小心,該關聯使用自己的字段並且不會創建新字段。我用這種方式,它工作正常。 – TGlatzer

+0

是的,因爲還有其他遺留系統正在使用數據庫。我試圖在功能上添加一個搜索。 –

回答

0

這聽起來像你想要幾個1:0..1的關係。

要映射這一點,首先你需要映射在類的實際關係:

public class Data 
{ 
    public int DataID { get; set; } 
    public int Year { get; set; } 
    public int Number { get; set; } 

    public Data1 Data1 { get; set; } 
    public Data2 Data2 { get; set; } 
    public DataOther DataOther { get; set; } 
} 

然後,用一口流利的定義關係:

 modelBuilder.Entity<Data>().HasOptional(d => d.Data1) 
      .WithRequired(); 
     modelBuilder.Entity<Data>().HasOptional(d => d.Data2) 
      .WithRequired(); 
     modelBuilder.Entity<Data>().HasOptional(d => d.DataOther) 
      .WithRequired(); 

這產生這個數據庫對我來說:

enter image description here

+0

感覺就像我幾乎在那裏。但是每次我嘗試Model.Datas.Others.Note其他其他都是NULL。假設它確實是一個1-1映射,我該怎麼做,似乎無法解決這個問題! –

+0

我不確定我完全理解你的問題 - Data對象中是否有Data_Other項目?如果是這樣,您可能需要使用[Include](http://msdn.microsoft.com/)COM/EN-US /庫/ bb738708.aspx)。如果你想創建一個新的,你可以創建一個新的DataOther並附加它 - EF將解決PK的問題。或者你是說這是1:1而不是1:0..1?如果是這樣,我們需要更新流利一點。 –

+0

這解決了我的問題,不得不使用包含在我的查詢中打開急切加載! –

相關問題