Создание множественных двунаправленных ассоциаций «один ко многим» с помощью автоматического анализа Fluent NHibernate - PullRequest
1 голос
/ 23 ноября 2010

Я довольно новичок в NHibernate и .NET Framework.

Я хочу отобразить свой класс Project, который имеет отношения один-ко-многим Subproject и ProjectTask.

public class Project : ProjectItem
{
    public virtual IList<Subproject> Subprojects { get; set; }

    public virtual IList<ProjectTask> Tasks { get; set; }

    [NotNull]
    public virtual ProjectStatus Status { get; set; }

    public Project()
    {
        Subprojects = new List<Subproject>();
        Tasks = new List<ProjectTask>();
        Status = new ProjectStatus();
    }

    public virtual void AddSubProject(Subproject subproject)
    {
        subproject.Project = this;
        Subprojects.Add(subproject);
    }

    public virtual void RemoveSubProject(Subproject subproject)
    {
        Subprojects.Remove(subproject);
    }

    public virtual void AddTask(ProjectTask task)
    {
        task.Project = this;
        Tasks.Add(task);
    }

    public virtual void RemoveTask(ProjectTask task)
    {
        Tasks.Remove(task);
    }
}

public class ProjectTask : ProjectItemTask
{
    [NotNull]
    public virtual Project Project { get; set; }
}

public class Subproject : ProjectItem
{
    [NotNull]
    public virtual Project Project { get; set; }
}

Мои сущности наследуют свойство Id от абстрактного базового класса.

Я использую автопреобразование для переопределения, чтобы переопределить мои отображения:только сопоставьте связь с классом Subproject, все работает нормально, и все экземпляры класса Subproject в Project.Subprojects будут правильно храниться в базе данных.Когда я использую второе переопределение для класса ProjectTask, я получаю следующее исключение:

---> NHibernate.HibernateException: в базе данных уже есть объект с именем ProjectId.Не удалось создать ограничение.Смотрите предыдущие ошибки.

---> System.Data.SqlClient.SqlException: в базе данных уже есть объект с именем ProjectId.

Кто-нибудь знает, почему это происходит?

1 Ответ

3 голосов
/ 23 ноября 2010

Вы должны сопоставить ссылки вашего проекта с Column, а не с ForeignKey

mapping.References<Project>(x => x.Project)
            .Column("ProjectId");
...