简体   繁体   English

Fluent NHibernate 映射问题

[英]Fluent NHibernate Mapping issues

I have the following classes and tables, I want to find out how to map it in Fluent Nhibernate:我有以下类和表,我想了解如何在 Fluent Nhibernate 中使用 map:

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; }
        }

Databse table数据库表

Table File
FileId, 

Table FileParameter
ParameterId, FileId, Name, DisplayName

Table FileParameterValue
FileParameterValueId, ParameterId, FileId, DefaultValue, DisplayStatus

What I want to achieve is that, there is one master file and its many details files.我想要实现的是,有一个主文件及其许多细节文件。 Each master file has its own FileParameter, and FileParameValue.每个主文件都有自己的 FileParameter 和 FileParameValue。 Each of the master file's child files use the master file's FileParameter, but has its own FileParameterValue.主文件的每个子文件都使用主文件的 FileParameter,但有自己的 FileParameterValue。

Any ideal would be very much appreicated.任何理想都会非常受欢迎。

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
    }
}

you have to make sure programmatically, that if you add a parametervalue in a detailsfile you use a parameter-object of the master file您必须以编程方式确保,如果您在详细信息文件中添加参数值,您将使用主文件的参数对象

see also for a similar problem NHibernate mapping另见类似问题NHibernate 映射

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM