2010-07-18 121 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应用程序,测试并运行。

注意:以上是否需要所有这些步骤我不知道,这只是 是我的尝试,它为我工作。