【发布时间】:2010-07-18 19:39:17
【问题描述】:
有谁知道如何更改 EF4(实体框架 4)中实体的映射 db 表?
稍后编辑:我想我已经在模型浏览器中找到了定义表名的地方。但是它们的名称是只读的,因此无法使用设计器对其进行编辑。此外,没有引用(从我搜索的内容)到 xml 架构中的表名。
【问题讨论】:
标签: c# .net entity-framework entity-framework-4
有谁知道如何更改 EF4(实体框架 4)中实体的映射 db 表?
稍后编辑:我想我已经在模型浏览器中找到了定义表名的地方。但是它们的名称是只读的,因此无法使用设计器对其进行编辑。此外,没有引用(从我搜索的内容)到 xml 架构中的表名。
【问题讨论】:
标签: c# .net entity-framework entity-framework-4
如果您只需要更改表的名称,您可以:
<EntitySet Name="Customers" EntityType="ExampleModel.Store.Customers" Schema="dbo" />。 Table="MyTableName" 属性。 <EntitySet Name="Customers" EntityType="ExampleModel.Store.Customers" Schema="dbo" Table="MyTableName" />
这是一个完整的CSDL, SSDL, MSL specification。
希望对您有所帮助。
【讨论】:
另一种解决方案是覆盖 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"
}
}
【讨论】:
我相信您要问的是重新配置实体到表的映射。您可以右键单击实体并选择表映射。这将向您显示该表所映射的实体。你可以改变那里的桌子。但是,当您打开下拉列表时,您只会看到使用更新模型向导导入的表。如果表未导入,则不会列出。然后,您可以将属性适当地映射到表的列名。
【讨论】:
在模型浏览器或设计图面中,右键单击实体并选择属性。在属性窗口中编辑“实体集名称”字段。
这对我有用,但我是先设计架构,然后生成数据库。
【讨论】:
因为我首先创建了我的数据库,所以我做了以下操作:
注意:以上这些步骤是否都需要我不知道,只是 我尝试了什么,它对我有用。
【讨论】:
您可以执行更改表名的存储过程,将表名作为变量传递。然后将存储的过程导入EF4。
CREATE PROCEDURE ChangeTableName
@TableName varchar(200)
AS
BEGIN
SET NOCOUNT ON;
EXEC sp_rename "User", @TableName
END
GO
【讨论】: