【问题标题】:Change db table name in EF4 (entity framework 4)更改 EF4 中的数据库表名(实体框架 4)
【发布时间】:2010-07-18 19:39:17
【问题描述】:

有谁知道如何更改 EF4(实体框架 4)中实体的映射 db 表?

稍后编辑:我想我已经在模型浏览器中找到了定义表名的地方。但是它们的名称是只读的,因此无法使用设计器对其进行编辑。此外,没有引用(从我搜索的内容)到 xml 架构中的表名。

【问题讨论】:

    标签: c# .net entity-framework entity-framework-4


    【解决方案1】:

    如果您只需要更改表的名称,您可以:

    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

    希望对您有所帮助。

    【讨论】:

    • 这种方法的问题是每次重新生成数据库映射时都必须更改它。
    • 这不是 Zacho 提到的实用方法。
    【解决方案2】:

    另一种解决方案是覆盖 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"
        }
    }
    

    【讨论】:

      【解决方案3】:

      我相信您要问的是重新配置实体到表的映射。您可以右键单击实体并选择表映射。这将向您显示该表所映射的实体。你可以改变那里的桌子。但是,当您打开下拉列表时,您只会看到使用更新模型向导导入的表。如果表未导入,则不会列出。然后,您可以将属性适当地映射到表的列名。

      【讨论】:

        【解决方案4】:

        在模型浏览器或设计图面中,右键单击实体并选择属性。在属性窗口中编辑“实体集名称”字段。

        这对我有用,但我是先设计架构,然后生成数据库。

        【讨论】:

          【解决方案5】:

          因为我首先创建了我的数据库,所以我做了以下操作:

          1. 已备份 *.edmx 文件。
          2. 更改了我的数据库表名。
          3. 按照您的建议重命名属性中的实体集名称。
          4. 然后我通过右键单击实体更新了基于我的数据库的模型。
          5. 我注意到 *.edmx 文件丢失了一半的行,所以我用我的备份覆盖了 *.edmx 文件,在记事本中打开它,然后用我的新表名替换了所有旧表名。
          6. 重新构建了 MVC 应用程序,经过测试,它工作正常。

          注意:以上这些步骤是否都需要我不知道,只是 我尝试了什么,它对我有用。

          【讨论】:

            【解决方案6】:

            您可以执行更改表名的存储过程,将表名作为变量传递。然后将存储的过程导入EF4。

            CREATE PROCEDURE ChangeTableName
                @TableName varchar(200)
            AS
            BEGIN
                SET NOCOUNT ON;
                EXEC sp_rename "User", @TableName
            END
            GO
            

            【讨论】:

            • 但我看不到导入存储过程将如何更新架构。我想我没有明确我想要实现的目标,我正在尝试更改 ef 模式映射到的表,例如现在它正在从数据库中的表 x 中检索数据,我想要它现在从表 y 中检索数据,两个表都存在于数据库中,两者具有完全相同的结构。我不能简单地将数据从一个表导入到另一个表的原因是因为一个表被一些无法修改的应用程序使用,并且所有应用程序都需要访问相同的数据。感谢您的回复。
            • 我看到了问题。重命名表后需要动态更新 EF Schema。
            • 这可能适用于本地小型项目,但在企业环境中这是完全不能接受的。谁知道是什么触动了这些表名。
            猜你喜欢
            • 2014-06-16
            • 2018-02-20
            • 2018-12-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-11
            相关资源
            最近更新 更多