【问题标题】:Fluent Nhibernate - One to Many Mapping IssueFluent Nhibernate - 一对多映射问题
【发布时间】:2011-07-17 11:23:40
【问题描述】:

我在 fluent nhibernate 中尝试进行一对多映射时遇到 NHibernate.MappingException。 以下是我的实体的 sn-ps 及其映射类:

public class ReportRequest : IReportRequestToBeFullyLoaded
{
    public virtual Int32? Id { get; set; }
    public virtual string Description { get; set; }
    public virtual ISet<ReportOutputEmail> ReportOutputEmails { get; set; }
}

public class ReportOutputEmail
{
    public virtual string RecipientAddress { get; set; }
    public virtual string Message { get; set; }
    public virtual ReportRequest ReportRequest { get; set; }
}

public class ReportRequestMap : ClassMap<ReportRequest>
{
    public ReportRequestMap()
    {
        Table("ReportRequest");
        Id(x => x.Id).UnsavedValue(null).GeneratedBy.Native();
        Map(x => x.Description);
        HasMany(x => x.ReportOutputEmails).Table("ReportOutputEmail")
            .ForeignKeyConstraintName("FK_ReportOutputEmail_ReportRequest")
            .KeyColumn("ReportRequestId")
            .AsSet()
            .Inverse()
            .Cascade.AllDeleteOrphan();
    }
}

public class ReportOutputEmailMap: ClassMap<ReportOutputEmail>
{
    public ReportOutputEmailMap()
    {
        References(x => x.ReportRequest)
            .ForeignKey("FK_ReportOutputEmail_ReportRequest")
            .Column("ReportRequestId");
        Map(x => x.RecipientAddress);
        Map(x => x.Message);
    }
}

ReportRequest->ReportOutputEmail
之间的一对多映射存在一些问题 得到错误:

Error: NHibernate.MappingException: (XmlDocument)(3,6): XML validation error: The  
element 'class' in namespace 'urn:nhibernate-mapping-2.2' has invalid child element  
'property' 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-nhibernate mapping


    【解决方案1】:

    您的ReportOutputEmail 没有身份,如果要成为实体,则需要一个身份。

    另外,我建议您升级您的 Fluent NHibernate 副本,因为自 1.1 以来以更有用的方式报告了这一点(您会收到身份缺失消息)。

    【讨论】:

    • 感谢您的回复,我不能没有单独的 ReportOutputEmail 的 ID 吗?因为我想要的只是 ReportRequest.ReportRequestId 来识别 ReportOutputEmail 中的记录。
    • 您已指定ReportRequest 可以有多个ReportOutputEmail。您不能使用 ReportRequestId 作为主键,因为多条记录可能具有相同的值。
    • 谢谢!才知道这是 NHibernate 的设计。如果您的表没有任何类型的键,那么它就不是实体。
    猜你喜欢
    • 2011-10-09
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多