我可以更改entity framework4.3代码优先的默认模式名称吗?

目前我正在将我的应用程序部署到一个共享的宿主环境,并且代码优先,迁移一直很好,除了一个小小的打嗝。 每次我想要推动网站,我必须使用“更新数据库-script”选项,因为我必须预先为每个表名添加[dbo]因为默认情况下,共享主机将创build一个默认模式名称,该名称与数据库用户名

如果我login到我的共享主机并创build数据库,则必须创build一个用户。 如果我命名该用户pipe理员,那么在以admin身份login时,代码首先创build的表格类似于“[admin]。[BlogPosts]”。 当应用程序运行时,所有的表都被创build,但是我得到一个EFexception,因为它表示“[dbo]。[BlogPosts]”是无效的。 如果我将表的模式名称重命名为“[dbo]”,而不是“[admin]”,修复它。

为了解决这个问题,我必须生成一个手动执行的迁移脚本,并在所有表名之前添加“[dbo]”,因为脚本只是通过名称来引用表,而不是通过它们的模式和名称引用表。

有一个简单的方法来解决这个问题吗? 如果我所要做的只是发布应用程序并且一切正常,那将是如此的美好。 如果不是模式名称的差异,它将是一个一个点击的部署,一切都将是光荣的。

您可以使用ToTable方法来指定模式名称。 如果您不指定模式名称,则EF将按照惯例使用dbo

 public class MyContext { private string schemaName = "Foo"; protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<MyEntity>().ToTable("MyTable", schemaName); } } 

对于那些使用entity framework6的人,只需使用HasDefaultSchema方法:

 public class Contexto : DbContext { public DbSet<User> Users { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.HasDefaultSchema("MyDefaultDbSchema"); } } 

对于数据库的第一个实现,它的容易 打开edmx文件,右键单击 – >属性,然后设置默认数据库模式。

对于代码第一,这篇文章似乎最有前途。 http://devproconnections.com/entity-framework/working-schema-names-entity-framework-code-first-design

我想添加,因为这是为C#,我已经写了一个VB以下

 Public Class ClientDbContext Inherits DbContext Public Property Clients As DbSet(Of Client) Protected Overrides Sub OnModelCreating(modelBuilder As DbModelBuilder) modelBuilder.HasDefaultSchema("dbo") End Sub End Class 

首先 ,在EF代码中 ,默认情况下,所有内容都基于SQL Server中的pipe理访问“ DBO-Schema ”的用户访问权限进行设置。 但是,如果特定用户被定义为与共享主机中常见的数据库一起工作,则将不再有Dbopipe理访问。 这次我们的表名是dbo.tableName,例如someUser.tableName,这个点的不准确性使得程序无法运行。 修改并显式分配连接到数据库的用户。 如果使用元数据,则应使用以下方法

 [Table("MyTableName", Schema="MySchemaName")] public class MyClassName { //Other Lines... } 

或者 (不pipestream利的API是否可定制如下:)

 modelBuilder.Entity<Blog>().ToTable("MyTableName", schemaName:"MySchemaName"); 

注意以下几点: 在这里输入图像说明

一个很好的学习参考: http : //www.c-sharpcorner.com/article/fluent-api-in-code-first-approach/