Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# KitchenPC和Ironpython_C#_Postgresql_Fluent Nhibernate_Ironpython_Kitchenpc - Fatal编程技术网

C# KitchenPC和Ironpython

C# KitchenPC和Ironpython,c#,postgresql,fluent-nhibernate,ironpython,kitchenpc,C#,Postgresql,Fluent Nhibernate,Ironpython,Kitchenpc,我正在尝试使用IronPython与KitchenPC合作 我在这里使用数据库配置示例: 我正在成功引用和导入所有DLL及其命名空间: import clr clr.AddReference("System") from System import * from System.Reflection import * from System.Reflection import Assembly L4N = Assembly.LoadFrom('C://KitchenPC//DLL//log4n

我正在尝试使用IronPython与KitchenPC合作

我在这里使用数据库配置示例:

我正在成功引用和导入所有DLL及其命名空间:

import clr
clr.AddReference("System")

from System import *
from System.Reflection import *
from System.Reflection import Assembly

L4N = Assembly.LoadFrom('C://KitchenPC//DLL//log4net.dll')  
clr.AddReference(L4N)

NU= Assembly.LoadFrom('C://KitchenPC//DLL//nunit.framework.dll')  
clr.AddReference(NU)

LC= Assembly.LoadFrom('C://KitchenPC//DLL//Iesi.Collections.dll')  
clr.AddReference(LC)

PGSQL = Assembly.LoadFrom('C://KitchenPC//DLL//Npgsql.dll')  
clr.AddReference(PGSQL)

NH = Assembly.LoadFrom('C://KitchenPC//DLL//NHibernate.dll') 
clr.AddReference(NH)

FNH = Assembly.LoadFrom('C://KitchenPC//DLL//FluentNHibernate.dll')  
clr.AddReference(FNH)

KPC = Assembly.LoadFrom('C://KitchenPC//DLL//KitchenPC.dll')  
clr.AddReference(KPC)

KPCDB = Assembly.LoadFrom('C://KitchenPC//DLL//KitchenPC.DB.dll')  
clr.AddReference(KPCDB)

clr.AddReferenceToFileAndPath('C://KitchenPC//DLL//FluentNHibernate.dll')

from Npgsql import *
from log4net import *
from Iesi.Collections import *

from FluentNHibernate import *
from FluentNHibernate.Cfg import *
from FluentNHibernate.Cfg.Db import *

from NHibernate import *
from NHibernate.Cfg import Configuration

from KitchenPC import *
from KitchenPC.DB import *
from KitchenPC.Context import DBContext
from KitchenPC.DB import DatabaseAdapter

from NUnit.Framework import *
我可以这样定义PostgreSql配置:

但当我尝试设置databaseAdapter时:

DatabaseAdapter.Configure.DatabaseConfiguration( DBC )
我遇到了一个错误:

TypeError: expected IPersistenceConfigurer, got PostgreSQLConfiguration
奇怪的是instanceDBC,IPersistenceConfigurator返回True,所以DBC实际上是抽象类IPersistenceConfigurator的实例,IPersistenceConfigurator是DatabaseAdapter的子类

下面是我试图从C转换过来的原始代码示例:

// Context connected to local database
var dbConfig = Configuration.Build
   .Context(DBContext.Configure
      .Adapter(DatabaseAdapter.Configure
         .DatabaseConfiguration(
            PostgreSQLConfiguration.PostgreSQL82
               .ConnectionString(@"Server=localhost;Port=5432;User Id=Website;Password=password;Database=KPCSample")
               .ShowSql()
         )
      )
   ).Create();

// Context connected to local data store
var staticConfig = Configuration.Build
   .Context(StaticContext.Configure
      .DataDirectory(@"C:\KitchenPC\ConsoleTest\LocalStore\")
   )
   .Create();
以下是KitchenPC中DatabaseAdapter类的示例:

/// <summary>A database adapter that uses NHibernate to connect to an underlying database.</summary>
public class DatabaseAdapter : IDBAdapter, IDisposable
{
  ISessionFactory sessionFactory;
  Configuration nhConfig;
  readonly DatabaseAdapterBuilder builder;

  public IPersistenceConfigurer DatabaseConfiguration { get; set; }
  public List<IConvention> DatabaseConventions { get; set; }
  public ISearchProvider SearchProvider { get; set; }

  public static DatabaseAdapterBuilder Configure
  {
     get
     {
        return new DatabaseAdapter().builder;
     }
  }

  DatabaseAdapter()
  {
     builder = new DatabaseAdapterBuilder(this);
  }
}

在Ironpython中实例化DatabaseAdapter有什么不对吗?

结果是,我导入的方式不正确

但基本上,进口应该是这样的:

import clr
import sys
sys.path.append(os.path.abspath('./DLL')) #where your dlls are
clr.AddReference('System')
clr.AddReference('FluentNHibernate')
from FluentNHibernate.Cfg.Db import PostgreSQLConfiguration
如果另一个DLL在clr中导入DLL,则无需导入该DLL。

我想知道是否与此相关。基本上,问题是程序集被加载了两次。一次从bin目录VS builds到,一次从C:\KitchenPC\dll-也许您必须在代码中从bin目录加载?
import clr
import sys
sys.path.append(os.path.abspath('./DLL')) #where your dlls are
clr.AddReference('System')
clr.AddReference('FluentNHibernate')
from FluentNHibernate.Cfg.Db import PostgreSQLConfiguration