首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NHibernate未插入具有Guid的实体

NHibernate未插入具有Guid的实体
EN

Stack Overflow用户
提问于 2010-03-13 01:08:29
回答 1查看 3.1K关注 0票数 2

我正在使用Fluent NHibernate自动映射来测试NHibernate (版本2.1.0.4000)。

我的实体测试集使用默认的整数ID可以很好地保持

我现在正在尝试对实体使用Guid ID。不幸的是,将Id属性更改为Guid似乎会阻止NHibernate插入对象。

下面是实体类:

代码语言:javascript
运行
复制
public class User
{
    public virtual int Id { get; private set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
    public virtual string Email { get; set; }
    public virtual string Password { get; set; }

    public virtual List<UserGroup> Groups { get; set; }

}

下面是我正在使用的Fluent NHibernate配置:

代码语言:javascript
运行
复制
        SessionFactory = Fluently.Configure()
                            //.Database(SQLiteConfiguration.Standard.InMemory)
                            .Database(MsSqlConfiguration.MsSql2008.ConnectionString(@"Data Source=.\SQLEXPRESS;Initial Catalog=NHibernateTest;Uid=NHibernateTest;Password=password").ShowSql())
                            .Mappings(m =>
                                m.AutoMappings.Add(
                                    AutoMap.AssemblyOf<TestEntities.User>()
                                            .UseOverridesFromAssemblyOf<UserGroupMappingOverride>()))
                            .ExposeConfiguration(x =>
                                {
                                    x.SetProperty("current_session_context_class","web");
                                })
                            .ExposeConfiguration(Cfg => _configuration = Cfg)
                            .BuildSessionFactory();

以下是使用整数ID时的日志输出:

代码语言:javascript
运行
复制
16:23:14.287 [4] DEBUG NHibernate.Event.Default.DefaultSaveOrUpdateEventListener - saving transient instance
16:23:14.291 [4] DEBUG NHibernate.Event.Default.AbstractSaveEventListener - saving [TestEntities.User#<null>]
16:23:14.299 [4] DEBUG NHibernate.Event.Default.AbstractSaveEventListener - executing insertions
16:23:14.309 [4] DEBUG NHibernate.Event.Default.AbstractSaveEventListener - executing identity-insert immediately
16:23:14.313 [4] DEBUG NHibernate.Persister.Entity.AbstractEntityPersister - Inserting entity: TestEntities.User (native id)
16:23:14.321 [4] DEBUG NHibernate.AdoNet.AbstractBatcher - Opened new IDbCommand, open IDbCommands: 1
16:23:14.321 [4] DEBUG NHibernate.AdoNet.AbstractBatcher - Building an IDbCommand object for the SqlString: INSERT INTO [User] (FirstName, LastName, Email, Password) VALUES (?, ?, ?, ?); select SCOPE_IDENTITY()
16:23:14.322 [4] DEBUG NHibernate.Persister.Entity.AbstractEntityPersister - Dehydrating entity: [TestEntities.User#<null>]
16:23:14.323 [4] DEBUG NHibernate.Type.StringType - binding null to parameter: 0
16:23:14.323 [4] DEBUG NHibernate.Type.StringType - binding null to parameter: 1
16:23:14.323 [4] DEBUG NHibernate.Type.StringType - binding 'ertr' to parameter: 2
16:23:14.324 [4] DEBUG NHibernate.Type.StringType - binding 'tretret' to parameter: 3
16:23:14.329 [4] DEBUG NHibernate.SQL - INSERT INTO [User] (FirstName, LastName, Email, Password) VALUES (@p0, @p1, @p2, @p3); select SCOPE_IDENTITY();@p0 = NULL, @p1 = NULL, @p2 = 'ertr', @p3 = 'tretret'

下面是使用Guid时的输出:

代码语言:javascript
运行
复制
16:50:14.008 [4] DEBUG NHibernate.Event.Default.DefaultSaveOrUpdateEventListener - saving transient instance
16:50:14.012 [4] DEBUG NHibernate.Event.Default.AbstractSaveEventListener - generated identifier: d74e1bd3-1c01-46c8-996c-9d370115780d, using strategy: NHibernate.Id.GuidCombGenerator
16:50:14.013 [4] DEBUG NHibernate.Event.Default.AbstractSaveEventListener - saving [TestEntities.User#d74e1bd3-1c01-46c8-996c-9d370115780d]

这就是它静默失败的地方,没有抛出异常或进一步的日志条目。

看起来它正在为新对象正确地生成Guid ID,但没有得到更进一步的信息。

要使用Guid I,是否需要做一些不同的操作?

谢谢,

丹。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-03-14 04:59:16

您应该检查您的应用程序(非映射)代码,并确保您正在提交NHibernate ITransaction实例。

在使用整数ID和nativeidentity生成器时,NHibernate必须立即插入一个新实例,以便生成ID值(即使事务尚未提交)。当使用不依赖于数据库来生成is的标识符策略(如guid.comb )时,NHibernate实际上不会执行insert,直到提交了封闭的事务。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2434425

复制
相关文章

相似问题

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