实体框架创建表没有“数据库创建”权限?

时间:2011-07-11 02:24:23

标签: sql-server sql-server-2008 entity-framework-4.1

我首先使用Entity Framework代码和SQL Server 2008进行开发。

我想支持这种常见的安装方案:

  1. 数据库管理员手动创建新数据库以及仅具有访问该数据库的新用户(database_owner权限)
  2. 我的应用程序配置了这些数据库详细信息和新用户的登录
  3. 我的应用程序使用Entity Framework自动初始化数据库(创建表,视图等)
  4. 但是,当我尝试让Entity Framework初始化数据库时:

    context.Database.Create();
    

    我会得到一个异常,因为这个方法试图创建数据库,而不仅仅是在数据库中创建表,视图等。

    如何使用已经为其创建的数据库,使用没有“创建数据库”权限的用户初始化实体框架?

2 个答案:

答案 0 :(得分:4)

答案 1 :(得分:3)

与所使用的技术无关,应用程序应将部署权限与正常使用权限分开。要求更高的部署权限是完全可以接受的,您应该遵循相同的模型。换句话说,您的部署(读取:'Setup'或'MSI'或'Installation')应该需要更高的权限(例如dbcreator成员资格),并且在这个提升的部署环境下,创建'代码优先'模型。只需将“context.Database.Create”移动到您的应用程序安装程序中,让管理员安装该应用程序。