字典赢了';使用NHibernate 3.0不会持续

字典赢了';使用NHibernate 3.0不会持续,nhibernate,Nhibernate,我拥有以下实体: public class Alert { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual IDictionary<CxChannel, string> Messages { get; set; } } public enum CxChannel { Message, Email } 公共类

我拥有以下实体:

public class Alert
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual IDictionary<CxChannel, string> Messages { get; set; }
}

public enum CxChannel
{
    Message,
    Email
}
公共类警报
{
公共虚拟整数Id{get;set;}
公共虚拟字符串名称{get;set;}
公共虚拟IDictionary消息{get;set;}
}
公共枚举通道
{
消息
电子邮件
}
以及以下映射:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="Entities.Alert, Entities" table="alert">
  <id name="Id" type="int" unsaved-value="0" access="property">
    <generator class="identity"/>
  </id>

  <property name="Name" column="name"/>
    <map name="Messages" table="alert_message" cascade="all">
      <key column="alert_id"/>
      <index column="channel" type="Entities.CxChannel, Entities"/>
      <element column="message" type="System.String"/>
    </map>
  </class>
</hibernate-mapping>

问题是,当我保存一个警报实体时,消息字典并没有持久化到数据库中。事实上,我的代码看起来就像Oren在他的博客文章中使用的代码:


是否有人遇到过相同的问题?

验证您的通道列在架构中是否为整数,因为CxChannel枚举将映射为0(对于邮件)和1(对于电子邮件)。我刚刚将您的代码和映射粘贴到控制台项目中,使用了new SchemaExport(cfg)。Execute(false、true、false)并成功地将行插入到生成的数据库中。

验证您的通道列在您的模式中是否为整数,因为CxChannel枚举将映射为0(对于消息)和1(对于电子邮件)。我刚刚将您的代码和映射粘贴到一个控制台项目中,使用了new SchemaExport(cfg).Execute(false,true,false),并成功地将行插入到生成的数据库中。

您是否提交了事务?是的,Diego。此外,警报表已填充其数据。您是否正在提交事务?是的,Diego。此外,alert表中填充了它的数据。谢谢James。通道列在我的架构中是一个整数。有趣的是你可以让它工作。我将使用您的方法,看看我能找到什么。我想知道您的模式是否有些奇怪。我会将模式导出到一个干净的数据库中,然后使用DataDude或RedGate SQL Compare之类的工具区分生成的模式和您的模式。(顺便说一句,我使用的是NH3 build 3.0.0.2001。应该没有什么区别,但以防万一……)我尝试了与您解释的相同的方法,NHibernate没有在警报消息中插入数据。您是否返回查询以查看是否得到与您在邮件中插入的数据相同的数据?我为NHibernate设置show_sql=true,为map设置lazy=false,并注意到NHinbernate只为警报生成INSERT。但当我尝试加载数据时,它也从alert_消息中检索。我验证了两个表的插入都是使用NHProf发送的,并使用SQL Server Management Studio查看了这些表中的数据。验证您使用的是最新的NH3位(以防出现错误修复)。如果您仍然无法让它工作,我可以将带有二进制文件的示例放到GitHub中。我使用的是NHibernate 3.0 Beta 2(3.0.0.2002)。如果你把你的样品放在github让我和我的比较,我会很感激。谢谢James。通道列在我的架构中是一个整数。有趣的是你可以让它工作。我将使用您的方法,看看我能找到什么。我想知道您的模式是否有些奇怪。我会将模式导出到一个干净的数据库中,然后使用DataDude或RedGate SQL Compare之类的工具区分生成的模式和您的模式。(顺便说一句,我使用的是NH3 build 3.0.0.2001。应该没有什么区别,但以防万一……)我尝试了与您解释的相同的方法,NHibernate没有在警报消息中插入数据。您是否返回查询以查看是否得到与您在邮件中插入的数据相同的数据?我为NHibernate设置show_sql=true,为map设置lazy=false,并注意到NHinbernate只为警报生成INSERT。但当我尝试加载数据时,它也从alert_消息中检索。我验证了两个表的插入都是使用NHProf发送的,并使用SQL Server Management Studio查看了这些表中的数据。验证您使用的是最新的NH3位(以防出现错误修复)。如果您仍然无法让它工作,我可以将带有二进制文件的示例放到GitHub中。我使用的是NHibernate 3.0 Beta 2(3.0.0.2002)。如果你把你的样品放在github让我和我的比较,我将不胜感激。