流畅的NHibernate映射问题

时间:2011-08-11 12:52:24

标签: hibernate nhibernate fluent-nhibernate

我有以下类和表,我想了解如何在Fluent Nhibernate中映射它:

class File
        {
            public virtual int Id { get; set; }
            public virtual IList<FileParameter> FileParameters { get; set; }
            public virtual IList<File> DetailFile { get; set; }
        }

        class FileParameter
        {
            public virtual int Id { get; set; }
            public virtual File MasterFile { get; set; }
            public virtual string Name { get; set; }
            public virtual string DisplayName { get; set; }

            public virtual FileParameterValue FileParameterValue { get; set; }

        }

        class FileParameterValue
        {
            public virtual int Id { get; set; }
            public virtual File ParentFile { get; set;}
            public virtual FileParameter FileParameter { get; set; }
            public virtual string DefaultValue { get; set; }
            public virtual bool DisplayStatus { get; set; }
        }

数据库表

Table File
FileId, 

Table FileParameter
ParameterId, FileId, Name, DisplayName

Table FileParameterValue
FileParameterValueId, ParameterId, FileId, DefaultValue, DisplayStatus

我想要实现的是,有一个主文件及其许多详细信息文件。每个主文件都有自己的FileParameter和FileParameValue。每个主文件的子文件都使用主文件的FileParameter,但有自己的FileParameterValue。

任何理想都会非常有用。

1 个答案:

答案 0 :(得分:0)

class File
{
    public virtual int Id { get; set; }

    public virtual IDictionary<FileParameter, FileParameterValue> Parameters { get; set; }
    public virtual ICollection<File> Details { get; set; }
}

class FileParameter
{
    public virtual int Id { get; set; }
    public virtual File MasterFile { get; set; }
    public virtual string Name { get; set; }
    public virtual string DisplayName { get; set; }
}

class FileParameterValue
{
    public virtual int Id { get; set; }
    public virtual File ParentFile { get; set; }
    public virtual FileParameter FileParameter { get; set; }
    public virtual string DefaultValue { get; set; }
    public virtual bool DisplayStatus { get; set; }
}

class FileMap : ClassMap<File>
{
    public FileMap()
    {
        Id(file => file.Id).GeneratedBy.Identity();

        HasMany(file => file.Parameters)
            .AsEntityMap("ParameterId");

        // additional Properties
    }
}

class FileParameterMap : ClassMap<FileParameter>
{
    public FileParameterMap()
    {
        Id(param => param.Id).GeneratedBy.Identity();

        References(param => param.MasterFile, "FileId");

        // additional Properties
    }
}

class FileParameterValueMap : ClassMap<FileParameterValue>
{
    public FileParameterValueMap()
    {
        Id(param => param.Id).GeneratedBy.Identity();

        References(param => param.FileParameter, "ParameterId");

        // additional Properties
    }
}

您必须以编程方式确保,如果在详细信息文件中添加参数值,则使用主文件的参数对象

另请参阅类似问题NHibernate mapping