WebApi 2不使用Domain Model Dbcontext连接字符串

时间:2014-06-05 09:22:01

标签: c# mysql .net entity-framework asp.net-web-api

我使用的是n层架构,所以现在我有2个项目域和服务(WebApi2)

enter image description here

  • 我正在使用MySql作为我的项目
  • 我已经实现了自己的身份用户和EF的MySqlConfiguration
  • 我已运行update-database并正确更新

enter image description here

  • 但是当我在我的服务中使用它时,我的连接字符串是 Data Source=.\SQLEXPRESS;Initial Catalog=DefaultConnection;Integrated Security=True;MultipleActiveResultSets=True

来自域的我的App.config

<connectionStrings>
    <add name="DefaultConnection" connectionString="server=localhost;user id=root;password=admin123;persistsecurityinfo=True;database=GD" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
<entityFramework>
    <providers>
        <provider invariantName="MySql.Data.MySqlClient"
          type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity"/>
    </providers>
</entityFramework>
<system.data>
    <DbProviderFactories>
        <remove invariant="MySql.Data.MySqlClient"></remove>
        <add name="MySQL Data Provider"
          invariant="MySql.Data.MySqlClient"
          description=".Net Framework Data Provider for MySQL"
          type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.8.3.0"/>
    </DbProviderFactories>
</system.data>

在Startup.Auth.cs中,我添加了User的自定义实现和

UserManagerFactory = () => new UserManager<User>(new UserRepository());

UserRepository正在使用我的实体

 public UserRepository()
    {
        _entities = new Entities();
    }

Entity.cs:

public class Entities : DbContext
{
    static Entities() 
    {
        Database.SetInitializer(new MySqlInitializer());
    }

    public Entities() : base("DefaultConnection") { }

    public DbSet<User> IdentityUsers { get; set; } 
    public DbSet<Role> IdentityRoles { get; set; }
    public DbSet<IdentityUserClaim> IdentityUserClaims { get; set; }
    public DbSet<IdentityUserLogin> IdentityUserLogins { get; set; }
    public DbSet<IdentityUserRole> IdentityUserRoles { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<IdentityUserLogin>().HasKey(u => u.UserId);
        modelBuilder.Entity<IdentityUserRole>().HasKey(u => u.RoleId);
        modelBuilder.Entity<IdentityUserRole>().HasKey(u => u.UserId);
        base.OnModelCreating(modelBuilder);
    }
}

问:如何让项目服务使用域连接字符串?

2 个答案:

答案 0 :(得分:2)

当您的项目运行时,唯一使用的配置文件是启动项目中的文件(在您的情况下,Web API项目)。因此,您需要在其web.config文件中使用连接字符串。

注意:如果您有一个测试Web API的测试项目,那么这将是启动项目,您需要将连接字符串添加到该项目的配置文件中。如果没有,测试运行器将无法找到它,并且测试将失败

答案 1 :(得分:1)

配置管理器默认使用条目项目中的配置文件。基本上,您不应将配置放在依赖程序集中。

因此,如果您有 UI&lt; - Services&lt; - Domain 等参考链,则应将配置文件放在UI项目下。