2017-06-07 27 views
0

我們有一個已經建立了x年的大型實體模型,並且我想知道以下是否可能: 我們有很多舊實體,我們不直接將外鍵暴露給其他表,但他們在實體框架中有聯繫。即表1與表2具有一對多的關係,表2在數據庫表上有一個Table1_ID字段,但我無法從我的C#/ Entity Framework代碼中訪問它。有沒有一種乾淨的方式來顯示/添加這個而不刪除關聯並讀取它? 這是在型號第一實體框架在實體框架中,是否可以在生成模型後「將外鍵屬性添加到[表名] Entitiy」?

+0

*但我無法從我的C#/實體框架代碼中訪問*爲什麼不呢?如果這是數據庫優先的(我不認爲它是第一個模型,因爲你生成了EDMX?),這個列應該是EDMX的一部分,不是嗎? –

+0

@GertArnold當添加關聯時,公開生成的列是可選的,這是由別人編寫的舊代碼,並沒有包含該屬性,所以它在生成的表上,但我不能做Table2.Table1_ID,我只能做Table2表1這意味着我需要包括該表來查詢它,當我只需要ID字段。 –

+0

我的根本問題是,你不能改變代碼嗎?在類模型中顯示原始FK屬性(外鍵關聯vs獨立關聯)要容易得多。 –

回答

1

您可以使用數據標註和您Table2模型添加屬性:

using System.ComponentModel.DataAnnotations.Schema; 
... 
[Column("Table1_ID")] 
public int Table1Id { get; set; } 

如果您使用的是一口流利的API,你可以配置它這樣的:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Table2>() 
     .Property(t => t.Table1Id) 
     .HasColumnName("Table1_ID"); 
} 

然後創建新遷移並刪除UpDown函數中的所有內容。

public partial class Add_Table1_Reference_To_Table2_Model : DbMigration 
{ 
    public override void Up() 
    { 
    } 

    public override void Down() 
    { 
    } 
} 
+0

我的歉意,我忘了提及它是模型第一:(謝謝你,雖然 –

+0

@ScottBecker,你的意思是它應該也工作嗎? – Thomas

+0

@托馬斯 - 模型第一使用EDMX文件,不使用遷移 –

相關問題