Родительский и дочерний объекты в SimpleRepository

Как бы это работало в SimpleReporitory от Subsonic, если бы я хотел иметь возможность иметь отношение 1 ко многим между объектами?

Придется ли мне создать объект-мост, а затем построить родительский объект во время выполнения, или эта поддержка встроена?

Я ищу следующее:

Магазин примеров Адама ...

Public Class Shop

    Private m_id As Integer
    Private m_Name As String
    Private m_Employees As List(Of Employee)

    Public Property Id() As Integer
        Get
            Return m_id
        End Get
        Set(ByVal value As Integer)
            m_id = value
        End Set
    End Property

    Public Property Name() As String
        Get
            Return m_Name
        End Get
        Set(ByVal value As String)
            m_Name = value
        End Set
    End Property

    Public Property Employees() As List(Of Employee)
        Get
            Return m_Employees
        End Get
        Set(ByVal value As List(Of Employee))
            m_Employees = value
        End Set
    End Property

End Class

Public Class Employee

    Private m_id As Integer
    Private m_Name As String

    Public Property Id() As Integer
        Get
            Return m_id
        End Get
        Set(ByVal value As Integer)
            m_id = value
        End Set
    End Property

    Public Property Name() As String
        Get
            Return m_Name
        End Get
        Set(ByVal value As String)
            m_Name = value
        End Set
    End Property

End Class

Основные биты:

        Dim repo As New SimpleRepository("SubSonicObjectTest", SimpleRepositoryOptions.RunMigrations)

        Dim emplyee1 As New Employee
        emplyee1.Name = "Martin"
        Dim emplyee2 As New Employee
        emplyee2.Name = "Adam"

        Dim shop As New Shop
        shop.Name = "Sub Sonic Store"

        shop.Employees = New List(Of Employee)
        shop.Employees.Add(emplyee1)
        shop.Employees.Add(emplyee2)

        repo.Add(Of Shop)(shop)

Я думаю, это должно создать 3 таблицы:

Магазины
Сотрудники
ShopsToEmployees (или другое соглашение об именах)

Но я получаю только таблицу каналов!


person MrHinsh - Martin Hinshelwood    schedule 04.09.2009    source источник
comment
+1. Хороший вопрос. Не могу поверить, что никто не голосовал за это раньше.   -  person David    schedule 08.10.2009


Ответы (2)


В настоящее время я обновляю материал SimpleRepo, чтобы автоматически создавать объединенные таблицы на основе коллекций. Нелегко определить многие / многие против 1 / многие, но у меня есть некоторые идеи :).

person Community    schedule 09.09.2009
comment
Фантастический Роб :) Подожду новую версию - person MrHinsh - Martin Hinshelwood; 10.09.2009
comment
Я тоже хотел бы это увидеть. Свободный NHibernate - единственный вариант, о котором я знаю прямо сейчас, который делает это (см. stackoverflow.com/questions/1610362/) но это выглядит сложно. Дозвуковой подход должен быть намного проще, основываясь на моем (правда, ограниченном) опыте. - person Tom Bushell; 28.10.2009
comment
Я все еще один работаю над этим - здесь одиноко. Так что нет - понятия не имею, когда. - person ; 03.12.2009
comment
Роб, можно ли где-нибудь попробовать эту функцию в ветке или ветке? - person kay.one; 26.09.2010

Чтобы создать отношения «один ко многим», вам просто нужно создать объектную модель, все остальное SubSonic сделает за вас, например.

public class Shop
{
  public int Id { get; set; }
  public String Name { get; set; }
  public List<Employee> Employees { get; set; }
}

public class Employee
{
  public int Id { get; set; }
  public String Name { get; set; }
}

РЕДАКТИРОВАТЬ: это должно создать две таблицы, когда вы запускаете миграцию, а не 3. Три три таблицы, которые вы описываете в своем вопросе, будут представлять собой отношения «многие ко многим». Также в вашем примере вы не сохраняете своих сотрудников, SubSonic не выполняет каскадные сохранения, поэтому вам нужно сохранить свой магазин, затем добавить в него сотрудников и сохранить в пакетном режиме сотрудников.

person Adam Cooper    schedule 04.09.2009
comment
Я считаю, что ваш пример - это отношения один на один. Я обновил свой вопрос образцом объектной модели для "один ко многим" ... - person MrHinsh - Martin Hinshelwood; 04.09.2009
comment
Извините, опечатка в моем примере исправлена. - person Adam Cooper; 04.09.2009
comment
Также я думаю, что вам понадобится больше, чем просто один идентификатор в вашем классе контента, попробуйте добавить к нему другое свойство - person Adam Cooper; 04.09.2009
comment
Извините, Адам, на тестировании я это понял :) .. У меня до сих пор не получается Content table :( - person MrHinsh - Martin Hinshelwood; 04.09.2009
comment
Вы не спасаете своих сотрудников, это, вероятно, означает, что SubSonic никогда не запускает миграцию для этой таблицы, я также добавил дополнительную информацию в свой ответ. - person Adam Cooper; 04.09.2009
comment
Это ответ, который я искал для Адама, спасибо ... Я надеялся, что он будет каскадным ... но это не помешает сделке :) - person MrHinsh - Martin Hinshelwood; 04.09.2009