Родителски и дъщерен обект в 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 таблици:

Shops
Employees
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
Бих искал да видя и това. Fluent 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. 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
Съжалявам, Адам, при тестване разбрах това :).. Все още не получавам таблица със съдържание :( - person MrHinsh - Martin Hinshelwood; 04.09.2009
comment
Не запазвате служителите си, това вероятно означава, че SubSonic никога не изпълнява миграцията за тази таблица, добавих още информация към моя отговор. - person Adam Cooper; 04.09.2009
comment
Това е отговорът, който търсих, Адам, благодаря... Надявах се, че ще се получи каскада... но не нарушава сделката :) - person MrHinsh - Martin Hinshelwood; 04.09.2009