gpt4 book ai didi

c# - 流利的 : has invalid child element 'many-to-one' in namespace

转载 作者:太空宇宙 更新时间:2023-11-03 14:27:07 25 4
gpt4 key购买 nike

我正在尝试通过 Fluent NHibernate 映射我现有的数据库,但出现错误:

The element 'class' in namespace 'urn:nhibernate-mapping-2.2' has invalid child element 'many-to-one' in namespace 'urn:nhibernate-mapping-2.2'. List of possible elements expected: 'meta, subselect, cache, synchronize, comment, tuplizer, id, composite-id' in namespace 'urn:nhibernate-mapping-2.2'."}

我是 Fluent 的新手,我不知道如何解决它? (也许是因为 id 是字符串?)

这是我的模型类:

namespace Server.Model
{
public partial class User
{
string _name;

public string Name
{
get { return _name; }
set { _name = value; }
}
string _email;

public string Email
{
get { return _email; }
set { _email = value; }
}
TypeOfUser _typeOfUser;

public TypeOfUser TypeOfUser
{
get { return _typeOfUser; }
set { _typeOfUser = value; }
}
string _idUser;

public string IdUser
{
get { return _idUser; }
set { _idUser = value; }
}

public string Password { get; set; }

public static void AddUserTest()
{
var sessionFactory = BuildSessionFactory();

using (ISession session = sessionFactory.OpenSession())
{

using (ITransaction transaction = session.BeginTransaction())
{

session.Save(new User()
{
_idUser = "adapol",
_name = "Adam Mickiewicz",
_email = "adamm@wp.pl",
_typeOfUser = Model.TypeOfUser.NormalUser
});
}
}
}

private static ISessionFactory BuildSessionFactory()
{
AutoPersistenceModel model = CreateMappings();

return Fluently.Configure().Database(MsSqlConfiguration.MsSql2005
.ConnectionString(c => c.FromConnectionStringWithKey("gwd"))).Mappings(m => m.AutoMappings.Add(model))
.ExposeConfiguration((Configuration config) => new SchemaExport(config).Create(false, true)).BuildSessionFactory();

}

private static AutoPersistenceModel CreateMappings()
{
return AutoMap
.Assembly(System.Reflection.Assembly.GetCallingAssembly())
.Where(t => t.Namespace == "Server.Mappings");
}


}
}

我只有一个classMap

namespace Server.Mappings
{
public class UserMap : ClassMap<User>
{
public UserMap()
{
Table("Users");

Id(x => x.IdUser,"IdUser");
Map(x => x.Email);
Map(x => x.Name);
Map(x => x.Password);
Map(x => x.TypeOfUser,"Type");
}
}
}

这是创建我的表的脚本(它已经存在):

USE [GWD]
GO
/****** Object: Table [dbo].[Users] Script Date: 09/02/2010 23:08:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Users](
[IDuser] [nvarchar](50) NOT NULL,
[Type] [int] NOT NULL,
[Name] [nvarchar](max) NOT NULL,
[Email] [nvarchar](50) NOT NULL,
[Password] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED
(
[IDuser] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

最佳答案

而不是依赖自动映射:

private static ISessionFactory BuildSessionFactory()
{
AutoPersistenceModel model = CreateMappings();

return Fluently.Configure().Database(MsSqlConfiguration.MsSql2005
.ConnectionString(c => c.FromConnectionStringWithKey("gwd"))).Mappings(m => m.AutoMappings.Add(model))
.ExposeConfiguration((Configuration config) => new SchemaExport(config).Create(false, true)).BuildSessionFactory();

}

试试这个:

private static ISessionFactory BuildSessionFactory()
{
return Fluently
.Configure()
.Database(
MsSqlConfiguration
.MsSql2005
.ConnectionString(c => c.FromConnectionStringWithKey("gwd"))
)
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<UserMap>())
.ExposeConfiguration(config => new SchemaExport(config).Create(false, true))
.BuildSessionFactory();
}

您可能还需要将 User 属性设为虚拟。


这是一个使用 SQLite 的完整工作示例我用来说明示例配置的内容:

public class User
{
public virtual string IdUser { get; set; }
public virtual string Name { get; set; }
public virtual string Email { get; set; }
public virtual string Password { get; set; }
}

public class UserMap : ClassMap<User>
{
public UserMap()
{
Table("Users");
Id(x => x.IdUser);
Map(x => x.Email);
Map(x => x.Name);
Map(x => x.Password);
}
}


class Program
{
static void Main(string[] args)
{
if (File.Exists("data.db3"))
{
File.Delete("data.db3");
}

using (var factory = CreateSessionFactory())
{
using (var connection = factory.OpenSession().Connection)
{
ExecuteQuery("create table Users(IdUser string primary key, Name string, Email string, Password string)", connection);
}

using (var session = factory.OpenSession())
using (var tx = session.BeginTransaction())
{
session.Save(new User()
{
IdUser = "adapol",
Name = "Adam Mickiewicz",
Email = "adamm@wp.pl",
});
tx.Commit();
}
}
}

private static ISessionFactory CreateSessionFactory()
{
return Fluently.Configure()
.Database(
SQLiteConfiguration.Standard.UsingFile("data.db3").ShowSql()
)
.Mappings(
m => m.FluentMappings.AddFromAssemblyOf<UserMap>()
)
.BuildSessionFactory();
}

static void ExecuteQuery(string sql, IDbConnection connection)
{
using (var command = connection.CreateCommand())
{
command.CommandText = sql;
command.ExecuteNonQuery();
}
}
}

关于c# - 流利的 : has invalid child element 'many-to-one' in namespace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3631423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com