none
使用EF Power Tools CTP1时候会报错 RRS feed

  • 问题

  • 错误信息如下:

    错误参数。(异常来自 HRESULT:0x80070057 (E_INVALIDARG))

    An error occurred while trying to instantiate the dbcontext type TestDB2Context see the output window for details

    操作步骤如下:

    1.建立一个空的项目

    2.选择“Add Library Package Reference”加入“EFCodeFirst”的包

    3.选择“Entity Framework” >> “Reverse Engineer Code First” 会自动建立一系列对象。

    4.在DBContext上点右键,“Entity Framework” 下的四项,点任意一项都会出现一开始的错误

    请问是怎么回事?还需要加入什么库吗?

     

    public class TestDB2Context : DbContext

    {

    static TestDB2Context()

    Database.SetInitializer<TestDB2Context>(null);

    }

     

    public DbSet<Module> Modules { get; set; }

    public DbSet<Page> Pages { get; set; }

     

            protected override void OnModelCreating(DbModelBuilder modelBuilder)

    {

                modelBuilder.Conventions.Remove<IncludeMetadataConvention>();

    modelBuilder.Configurations.Add(new ModuleMap());

    modelBuilder.Configurations.Add(new PageMap());

    }

    }


    2011年6月7日 2:43

答案

  • 你好,你在OutPut窗口看到的错误是不是这样的:

     

    System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Data.ProviderIncompatibleException: The provider did not return a ProviderManifestToken string. ---> System.Data.SqlClient.SqlException:

    A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

    如果是的话,应该是User没有对数据库的决定的权限(db ower), 你可以添加以下这个权限,这样应该就没有问题了。

    并且,EF工具在生成EDM的时候是到数据库中读取数据库的结构,这个结构是存储在master数据库里面的,所以你要添加足够的权限给User。

    还有一种解决方案是:你在代码中再添加一个连接字符串,就像下面的代码:

    public class ProductContext : DbContext
     {
            public ProductContext()
                : base(@"Data Source=.;Initial Catalog=Product;Integrated Security=True")
            { }
      static ProductContext()
      {
       Database.SetInitializer<ProductContext>(null);
      }

      public DbSet<Category> Categories { get; set; }
      public DbSet<Product> Products { get; set; }

            protected override void OnModelCreating(DbModelBuilder modelBuilder)
      {
                modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
       modelBuilder.Configurations.Add(new CategoryMap());
       modelBuilder.Configurations.Add(new ProductMap());
      }

     并且config文件中的仍然保留,这样的话就没什么问题了,我试过了,可以!

    谢谢,

     


    Jackie Sun [MSFT]
    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。 
    MSDN 论坛好帮手 立刻免费下载  MSDN 论坛好帮手

    2011年6月9日 8:20
    版主

全部回复

  • 你好,在使用EF这个小工具之前是要在安装上EF4.1的,不知道你的安装了没有。这儿是Lingzhi Sun写的一篇关于这个小工具使用的博文,希望可以帮到你。

    http://www.cnblogs.com/LingzhiSun/archive/2011/05/24/EFPowerTool_1.html

     

    谢谢


    Jackie Sun [MSFT]
    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。
    MSDN 论坛好帮手 立刻免费下载  MSDN 论坛好帮手

    2011年6月8日 7:59
    版主
  • 已经装了不过还是不行。
    2011年6月9日 5:10
  • 你好,你在OutPut窗口看到的错误是不是这样的:

     

    System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Data.ProviderIncompatibleException: The provider did not return a ProviderManifestToken string. ---> System.Data.SqlClient.SqlException:

    A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

    如果是的话,应该是User没有对数据库的决定的权限(db ower), 你可以添加以下这个权限,这样应该就没有问题了。

    并且,EF工具在生成EDM的时候是到数据库中读取数据库的结构,这个结构是存储在master数据库里面的,所以你要添加足够的权限给User。

    还有一种解决方案是:你在代码中再添加一个连接字符串,就像下面的代码:

    public class ProductContext : DbContext
     {
            public ProductContext()
                : base(@"Data Source=.;Initial Catalog=Product;Integrated Security=True")
            { }
      static ProductContext()
      {
       Database.SetInitializer<ProductContext>(null);
      }

      public DbSet<Category> Categories { get; set; }
      public DbSet<Product> Products { get; set; }

            protected override void OnModelCreating(DbModelBuilder modelBuilder)
      {
                modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
       modelBuilder.Configurations.Add(new CategoryMap());
       modelBuilder.Configurations.Add(new ProductMap());
      }

     并且config文件中的仍然保留,这样的话就没什么问题了,我试过了,可以!

    谢谢,

     


    Jackie Sun [MSFT]
    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。 
    MSDN 论坛好帮手 立刻免费下载  MSDN 论坛好帮手

    2011年6月9日 8:20
    版主
  • 你好,感谢你的热心回答。

    这么做的确就没问题了。

    我用的是sa用户,并且我确认了一下在所有表上都有db ower这个权限。

    应该不是没有权限问题。

    2011年6月14日 0:54