首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >npgsql模式"dbo“不存在。

npgsql模式"dbo“不存在。
EN

Stack Overflow用户
提问于 2013-04-25 14:41:17
回答 4查看 10.1K关注 0票数 6

我有一个类似于EntityFramework5.0 PostgreSQL (Npgsql)默认连接工厂的问题

我在app.config中声明了Npgsql:

代码语言:javascript
复制
<connectionStrings>
    <add name="monDbContexte" 
         connectionString="Server=127.0.0.1;Port=5432;Database=ma_datab_db;User Id=postgres;Password=root;" 
     providerName="Npgsql" />
  </connectionStrings>
  <!-- le factory provider -->
  <system.data>
    <DbProviderFactories>
      <add name="Npgsql Data Provider" 
           invariant="Npgsql" 
           support="FF" 
           description=".Net Framework Data Provider for Postgresql Server" 
           type="Npgsql.NpgsqlFactory, Npgsql" />
    </DbProviderFactories>
  </system.data>
</configuration>

我的上下文提供程序类:

代码语言:javascript
复制
public class ContextDB: DbContext
{
    public DbSet<Personne> Personnes { get; set; }

    public ContextDB()
        : base("monDbContexte")
    {
    }
}

我的“人物”班:

表(“Personne”,Schema = " public ")公共类人员{ Key Display(Name=“标识符”)公共int id { get;set;}

代码语言:javascript
复制
    [Column("nom")]
    [Display(Name = "Nom")]
    [Required(ErrorMessage = "Merci de saisir le nom.")]
    public string Nom { get; set; }

    [Column("prenom")]
    [Display(Name = "Prénom")]
    [Required(ErrorMessage = "Merci de saisir le prénom.")]
    public string Prenom { get; set; }
...
...
}

在我的控制员行动中,我做了这样的事情:

代码语言:javascript
复制
            using (var context = new ContextDB())
            {
                // *** here i have an exception...
                var personnes = from p in context.Personnes
                              where p.Nom.StartsWith("m")
                              orderby p.Nom
                              select new { p.Nom, p.Prenom };

                foreach (var une_personne in personnes)
                {
                    Console.WriteLine(une_personne.Nom + " " + une_personne.Prenom);
                }

在此之后,我有这样一个例外:

代码语言:javascript
复制
ERROR: schema "dbo" does not exist

这是一个NpgsqlException

法语

代码语言:javascript
复制
 ERREUR: 3F000: le schéma « dbo » n'existe pas

我不知道这是怎么回事

编辑:

这是一个例外:

(对不起,是法文)

PS :我在"C:\projects\Npgsql2“中没有任何项目,在我当前的项目中也没有类似的路径,那么这是什么呢?

代码语言:javascript
复制
L'exception Npgsql.NpgsqlException n'a pas été gérée par le code utilisateur
  HResult=-2147467259
  Message=ERREUR: 3F000: le schéma « dbo » n'existe pas
  Source=Npgsql
  ErrorCode=-2147467259
  BaseMessage=le schéma « dbo » n'existe pas
  Code=3F000
  Detail=""
  ErrorSql=SELECT "GroupBy1"."A1" AS "C1" FROM (SELECT CAST (count(1) AS int4) AS "A1" FROM "dbo"."__MigrationHistory" AS "Extent1Group") AS "GroupBy1"
  File=src\backend\catalog\namespace.c
  Hint=""
  Line=2826
  Position=82
  Routine=get_namespace_oid
  Severity=ERREUR
  Where=""
  StackTrace:
       à Npgsql.NpgsqlState.<ProcessBackendResponses_Ver_3>d__a.MoveNext() dans C:\projects\Npgsql2\src\Npgsql\NpgsqlState.cs:ligne 850
       à Npgsql.ForwardsOnlyDataReader.GetNextResponseObject() dans C:\projects\Npgsql2\src\Npgsql\NpgsqlDataReader.cs:ligne 1173
       à Npgsql.ForwardsOnlyDataReader.GetNextRowDescription() dans C:\projects\Npgsql2\src\Npgsql\NpgsqlDataReader.cs:ligne 1191
       à Npgsql.ForwardsOnlyDataReader.NextResult() dans C:\projects\Npgsql2\src\Npgsql\NpgsqlDataReader.cs:ligne 1377
       à Npgsql.ForwardsOnlyDataReader..ctor(IEnumerable`1 dataEnumeration, CommandBehavior behavior, NpgsqlCommand command, NotificationThreadBlock threadBlock, Boolean synchOnReadError) dans C:\projects\Npgsql2\src\Npgsql\NpgsqlDataReader.cs:ligne 1040
       à Npgsql.NpgsqlCommand.GetReader(CommandBehavior cb) dans C:\projects\Npgsql2\src\Npgsql\NpgsqlCommand.cs:ligne 611
       à Npgsql.NpgsqlCommand.ExecuteReader(CommandBehavior cb) dans C:\projects\Npgsql2\src\Npgsql\NpgsqlCommand.cs:ligne 588
       à Npgsql.NpgsqlCommand.ExecuteDbDataReader(CommandBehavior behavior) dans C:\projects\Npgsql2\src\Npgsql\NpgsqlCommand.cs:ligne 538
       à System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
       à System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
  InnerException: 
EN

回答 4

Stack Overflow用户

发布于 2013-06-14 22:02:34

看起来EF使用dbo作为数据库的默认架构。您需要将其更改为"public“,这是Postgresql的默认架构。

您可以通过导入命名空间来使用该名称空间:

代码语言:javascript
复制
using System.ComponentModel.DataAnnotations;

并注释类以使用不同的模式:

代码语言:javascript
复制
[Table("mytable", Schema = "public")]
Class test {...}

有关更多信息,请查看我关于EF和Npgsql:http://fxjr.blogspot.com/2013/06/npgsql-code-first-entity-framework-431.html的文章。

希望能帮上忙。

票数 5
EN

Stack Overflow用户

发布于 2019-03-06 10:27:23

我用了EntitiyFramework6 6.2.0EntityFramework6.Npgsql v3.2.0Npgsql 4.0.2

在上下文类上,在modelBuilder.HasDefaultSchema("public");函数中添加OnModelCreating

例如;

代码语言:javascript
复制
public class ContextDB: DbContext
{
    public DbSet<Personne> Personnes { get; set; }

    public ContextDB()
        : base("monDbContexte")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("public");
        base.OnModelCreating(modelBuilder);
    }
}
票数 4
EN

Stack Overflow用户

发布于 2013-04-30 21:27:21

我也有同样的问题。不知道为什么,但是当我没有在Database.SetInitializer方法中使用Application_Start()方法时,这是很好的。所以:

代码语言:javascript
复制
//Database.SetInitializer<ContextDB>(new ContextDBInitializer());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16217794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档