在Code First Entity Framework中指定除dbo之外的SQL用户名(C#ASP.NET MVC 3)

Rya*_*man 14 c# sql-server asp.net-mvc entity-framework

我正在尝试从通过EF(代码优先)连接的ASP.NET MVC 3应用程序中的C#连接到共享托管环境中的SQL Server 2008数据库.

我的问题是生成的SELECT语句如下所示:

SELECT ... FROM [dbo].[TableName]
Run Code Online (Sandbox Code Playgroud)

抛出错误Invalid object name,但在我这样做时工作正常:

SELECT ... FROM [mySQLUserName].[TableName]
Run Code Online (Sandbox Code Playgroud)

如何指定dbo(例如mySQLUserName)以外的用户名?


编辑:

我发现的与此问题相关的最接近的文章是:

特别强调第二篇文章,但它没有指定如何设置除以外的用户名 dbo

Ada*_*ras 13

您可以使用TableAttribute装饰实体类的属性指定架构.

[Table("TableName", Schema = "mySQLUserName")]
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法在全球范围内设置?EF使用dbo by deafult,而不是我们指定它...这样烦恼改变我所有的课程 (5认同)

Eri*_*sch 7

您没有说您正在使用哪个版本的EF.如果您使用的是Code First(4.1),则可以在表属性上指定架构:

[Table("Users", Schema = "myschema")]
public class User { .. }
Run Code Online (Sandbox Code Playgroud)

您可以使用Scott的文章(第二篇)作为基础,但您添加了一个额外的参数.即:

modelBuilder.Entity<YourType>().ToTable("TableName", "SchemaName"); 
Run Code Online (Sandbox Code Playgroud)


Bil*_*ill 7

使用EF6,您现在可以执行此操作.

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("logs");  //set default schema
        modelBuilder.Configurations.Add(new LogMap());
        ...
    }
Run Code Online (Sandbox Code Playgroud)