2010-07-18 122 views
13

有誰知道如何更改EF4(實體框架4)中實體的映射數據庫表?在EF4(實體框架4)中更改數據庫表名稱

後來編輯:我想我已經找到了在模型瀏覽器中定義表名的地方。但是他們的名字是隻讀的,所以使用設計者無法編輯它們。另外,沒有任何引用(來自我搜索的內容)到xml模式中的表名。

回答

19

如果你只需要改變表的名稱,您可以:

  1. 與XML編輯器中打開EDMX文件。
  2. 在其中找到SSDL部分。
  3. 找到實體集元素,例如<EntitySet Name="Customers" EntityType="ExampleModel.Store.Customers" Schema="dbo" />
  4. 添加Table="MyTableName"屬性。 <EntitySet Name="Customers" EntityType="ExampleModel.Store.Customers" Schema="dbo" Table="MyTableName" />

這是一個完整的CSDL, SSDL, MSL specification

希望有所幫助。

+2

這種方法的問題在於,每次重新生成數據庫映射時都必須更改它。 – Zacho 2011-01-26 04:19:35

+0

Zacho提到這不是一種實用的方法。 – 2014-09-09 08:42:06

0

您可以執行一個存儲過程來更改表名,並將表名作爲變量傳遞。然後將存儲的proc導入EF4。

CREATE PROCEDURE ChangeTableName

@TableName varchar(200) 

AS BEGIN SET NOCOUNT ON;

EXEC sp_rename "User", @TableName 

END GO

+0

但我看不到如何導入存儲過程將更新架構。 我想我沒有說清楚我想要實現什麼,我試圖改變ef模式映射到的表,例如現在它從數據庫中的表x中檢索數據,我希望它現在從表y中檢索數據,兩個表都存在於數據庫中,兩者都具有完全相同的結構。我無法簡單地將數據從一個表導入另一個表的原因是因爲一些表被某些無法修改的應用程序所使用,並且所有應用程序都需要訪問相同的數據。謝謝回覆。 – scripni 2010-07-18 20:46:32

+0

我看到問題了。重命名錶後需要動態更新EF架構。 – fARcRY 2010-07-18 21:17:25

+0

這可能適用於當地的一個小型項目,但在企業環境中這是完全不可接受的。誰知道是什麼觸及這些表名。 – Zacho 2011-01-26 04:20:52

7

我相信你所要求的是重新配置一個實體到一個表的映射。您可以右鍵單擊一個實體並選擇表格映射。這會向您顯示錶格映射的實體。你可以在那裏改變表格。但是,當您打開下拉菜單時,只會看到使用更新模型嚮導導入的表格。如果表格未導入,則不會列出。然後,您可以將這些屬性適當地映射到表格的列名稱。

12

另一種解決方案是覆蓋DbContext類中的方法。

public class MyDbContext : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Product>().ToTable("DB_PRODUCTS_TBL"); 
     // otherwise EF assumes the table is called "Products" 
    } 
} 
+0

太棒了!我正在做「Code First」,所以這對我很有用。 – JDPeckham 2012-07-15 15:54:49

0

在模型瀏覽器或設計表面中,右鍵單擊該實體並選擇屬性。在屬性窗口中編輯字段「實體集名稱」。

這對我很有用,但是我首先設計了模式,然後生成了數據庫。

0

因爲我創造了我的數據庫首先,我做了以下內容:

  1. 備份的* .edmx文件。
  2. 更改了我的數據庫表名。
  3. 按照您的建議,通過重命名屬性中的實體集名稱。
  4. 然後,我通過右鍵單擊實體來更新基於我的數據庫的模型。
  5. 我注意到* .edmx文件丟失了一半的行,所以我用備份覆蓋了* .edmx文件,在記事本中打開了它,並用我的新表名替換了所有舊錶名。
  6. 重建MVC應用程序,測試並運行。

注意:以上是否需要所有這些步驟我不知道,這只是 是我的嘗試,它爲我工作。