Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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# Fluent NHibernate SQLException,表中没有现有列_C#_.net_Sql Server_Nhibernate_Fluent Nhibernate - Fatal编程技术网

C# Fluent NHibernate SQLException,表中没有现有列

C# Fluent NHibernate SQLException,表中没有现有列,c#,.net,sql-server,nhibernate,fluent-nhibernate,C#,.net,Sql Server,Nhibernate,Fluent Nhibernate,我正在重新实现一些访问数据库对象的方法。我在数据库中重建了一个表,删除了4列。然后我删除了Fluent NHibernate映射、表对象类,并尝试在数据库中创建新对象。当我从ISession()调用.Save()方法时,出现异常: {NHibernate.Exceptions.GenericADOException:无法插入:[Uzytkownik][SQL:插入到dbo中。[Uzytkownik](aktywne,haslo,login,dostep)值(?,,,,?);选择SCOPE_IDE

我正在重新实现一些访问数据库对象的方法。我在数据库中重建了一个表,删除了4列。然后我删除了Fluent NHibernate映射、表对象类,并尝试在数据库中创建新对象。当我从
ISession()
调用
.Save()
方法时,出现异常:

{NHibernate.Exceptions.GenericADOException:无法插入:[Uzytkownik][SQL:插入到dbo中。[Uzytkownik](aktywne,haslo,login,dostep)值(?,,,,?);选择SCOPE_IDENTITY()]-->System.Data.SqlClient.SqlException:列名“imie”无效。
列名“nazwisko”无效。
列名“telefon”无效。
列名称“adres\U email”无效。
w System.Data.SqlClient.SqlConnection.OnError(SqlException异常、布尔断开连接、操作1 wrapCloseInAction)

删除的列是“imie”、“nazwisko”、“telefon”、“adres_email”。我在源代码中查找了其中任何一个,但再也找不到了。这是我的映射类:

using System;
using FluentNHibernate.Mapping;

namespace Mappings
{
    public class UzytkownikMapping : ClassMap<Uzytkownik>
    {
        public UzytkownikMapping()
        {
            Table("`uzytkownik`");
            Schema("dbo");
            Id(x => x.IdUzytkownik, "id_uzytkownik").GeneratedBy.Native();
            Not.LazyLoad();
            Map(x => x.Aktywne, "aktywne");
            Map(x => x.Haslo, "haslo");
            Map(x => x.Login, "login");
            Map(x => x.Uprawnienia, "dostep");
            HasManyToMany(x => x.Aktywas)
                .ChildKeyColumn("id_aktywa")
                .ParentKeyColumn("id_uzytkownik")
                .Cascade.All()
                .Table("aktywa_role")
                .Fetch.Select()
                .AsSet();
            HasManyToMany(x => x.Rolas)
                .ChildKeyColumn("id_rola")
                .ParentKeyColumn("id_uzytkownik")
                .Cascade.All()
                .Table("aktywa_role")
                .Fetch.Select()
                .AsSet();
            HasManyToMany(x => x.RoleSystems)
                .ChildKeyColumn("id_role_system")
            .ParentKeyColumn("id_uzytkownik")
                .Cascade.All()
                .Table("role_system_uzytkownik")
                .Fetch.Select()
                .AsSet();
            HasMany(x => x.UzytkownikAtrybutys)
                .KeyColumn("id_uzytkownik")
                .Fetch.Select()
                .AsSet()
                .Cascade.AllDeleteOrphan();
        }
    }
}
知道我会在哪里出错吗?或者NHibernate可以有一个额外的映射文件

@编辑 映射到配置:

FluentConfiguration configuration = Fluently.Configure()
            .Database(connectionString)
            .ExposeConfiguration(   c => c.SetProperty("current_session_context_class", "web"))
            .Mappings(m => m.FluentMappings.Add<UzytkownikMapping>())
NHibernateCfg = configuration.BuildConfiguration();
FluentNHibernate.Cfg.Fluently.Configure(NHibernateCfg).BuildSessionFactory().OpenSession().Save(NewUser);
FluentConfiguration=Fluently.Configure()
.数据库(连接字符串)
.ExposeConfiguration(c=>c.SetProperty(“当前会话上下文类”、“web”))
.Mappings(m=>m.FluentMappings.Add())
NHibernateCfg=configuration.BuildConfiguration();
FluentNHibernate.Cfg.fluent.Configure(NHibernateCfg.BuildSessionFactory().OpenSession().Save(NewUser);

您的配置似乎未重建。有关详细信息,请参阅本文:

摘录:

重要的代码是FluentlyConfigure()方法

…现在它仍然在
Foo.Data
中,因此如果这一更改,将不会重建配置对象。我需要将其移出到
Foo.Data.Mappings
中,以便如果我在那里更改任何内容,将重建配置


因此,您可能在not rebuild project中有配置,而映射被放置在其他位置…

好的,我试图进行一些重建配置,但它仍然通知我它有额外的列。我在@Edit.之后的first post中做了一些类似的事情。对我来说似乎是好的…重点是,根据经验,我们知道:1)您更改了ma代码2)NHibernate仍然提供旧的映射。很难猜出所有可能的错误…但我现在建议:干净的解决方案,确保没有旧的dll保留。确保您的代码已就位并重新生成。这必须确保为NHibernate提供最新的映射。换句话说,这就是问题所在。旧的映射。我我确定你重建了整个项目吗?(在更改映射后创建了dll)这可能很愚蠢,但仍然试图提供帮助。还有在哪里。还要检查项目依赖关系。
FluentConfiguration configuration = Fluently.Configure()
            .Database(connectionString)
            .ExposeConfiguration(   c => c.SetProperty("current_session_context_class", "web"))
            .Mappings(m => m.FluentMappings.Add<UzytkownikMapping>())
NHibernateCfg = configuration.BuildConfiguration();
FluentNHibernate.Cfg.Fluently.Configure(NHibernateCfg).BuildSessionFactory().OpenSession().Save(NewUser);