【问题标题】:FluentNHibernate: An invalid or incomplete configuration was used while creating a SessionFactoryFluentNHibernate:创建 SessionFactory 时使用了无效或不完整的配置
【发布时间】:2017-10-24 19:55:41
【问题描述】:

所以,我对 FluentNHibernate 有疑问。我已映射所有属性,已链接表,但出现错误:

创建 SessionFactory 时使用了无效或不完整的配置。查看PotentialReasons 集合和InnerException 了解更多详情。

不太确定问题出在哪里,因为我是根据以前的程序创建映射、类和数据库的。我创建 SessionFactory 的 DataLayer 类是:

namespace WTF.Edit1
{
    public class DataLayer
    {
    private static ISessionFactory _factory = null;
    private static object objLock = new object();


    public static ISession GetSession()
    {

        if (_factory == null)
        {
            lock (objLock)
            {
                if (_factory == null)
                    _factory = CreateSessionFactory();
            }
        }

        return _factory.OpenSession();
    }

    //konfiguracija i kreiranje session factory
    private static ISessionFactory CreateSessionFactory()
    {
        try
        {
            var cfg = OracleManagedDataClientConfiguration.Oracle10
            .ConnectionString(c =>
                c.Is("Data Source=datasource:1111/AAAA;User Id=user;Password=pass"));

            return Fluently.Configure()
                .Database(cfg)
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<KorisnikMapiranja>())
                .BuildSessionFactory();
        }
        catch (Exception ec)
        {
            System.Windows.Forms.MessageBox.Show(ec.Message);
            return null;
        }

    }
}
}

我要将信息放入数据库的具体类是:

namespace WTF.Edit1.Podaci
{
    public class Korisnik
    {       
        public virtual string Tip { get; set; }
        public virtual string Ime { get; set; }
        public virtual string Prezime { get; set; }
        public virtual string KorisnickoIme { get; set; }
        public virtual string Lozinka { get; set; }
        public virtual string PonovljenaLozinka { get; set; }
        public virtual string Email { get; set; }
        public virtual string Pol { get; set; }

        public virtual IList<Recept> Recepti { get; set; }
        public virtual IList<Komentar> Komentari { get; set; }
        public virtual IList<Ocena> Ocene { get; set; }

        public Korisnik()
        {
            Recepti = new List<Recept>();
            Komentari = new List<Komentar>();
            Ocene = new List<Ocena>();
        }
    }

    public class User : Korisnik
    {
    }

    public class Admin : Korisnik
    {
    }
}

而映射是:

namespace WTF.Edit1.Mapiranja
{
class KorisnikMapiranja : ClassMap<Korisnik>
{
    public KorisnikMapiranja()
    {
        Table("KORISNIK");

        Id(x => x.KorisnickoIme, "USERNAME");

        Map(x => x.Ime, "IME");
        Map(x => x.Prezime, "PREZIME");
        Map(x => x.Email, "EMAIL");
        Map(x => x.Lozinka, "PASSWORD");
        Map(x => x.PonovljenaLozinka, "PASSREPEAT");
        Map(x => x.Pol, "POL");
        Map(x => x.Tip, "TIP");

        HasMany(x => x.Recepti).KeyColumn("USERNAME");
        HasMany(x => x.Komentari).KeyColumn("USERNAME");
        HasMany(x => x.Ocene).KeyColumn("USERNAME");
    }
}

class UserMapiranja : SubclassMap<User>
{
    public UserMapiranja()
    {
        Table("USERI");

        KeyColumn("USERNAME");
    }
}

class AdminMapiranja : SubclassMap<Admin>
{
    public AdminMapiranja()
    {
        Table("ADMIN");

        KeyColumn("USERNAME");
    }
}
}

有什么想法吗?我试图研究并找到答案,但对我没有任何帮助。

【问题讨论】:

  • 您能否检查顶级异常的InnerException 属性并将其添加到您的问题中。它通常非常详细,并且通常会告诉您确切的问题。

标签: c# nhibernate fluent-nhibernate oracle-sqldeveloper fluent-nhibernate-mapping


【解决方案1】:

您可能缺少 Oracle 托管客户端。 您需要引用/访问它才能使用 OracleManagedDataClientConfiguration

如果可能,只需通过 nuget 安装相应的包,看看是否是导致您的异常的原因: https://www.nuget.org/packages/Oracle.ManagedDataAccess/

安装包 Oracle.ManagedDataAccess

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    相关资源
    最近更新 更多