Как использовать отношения «один ко многим» в SubSonic - PullRequest
1 голос
/ 08 мая 2009
  • Каким образом SubSonic может рассказать об отношениях (только внешние ключи? Или другие методы тоже)?
  • Если у меня есть (например) объект команды со связанными членами команды

    ** как мне получить доступ и обновить членов команды из команды

    ** как мне обновить участников команды? Сохраняет ли объект команды сохранение изменений членов команды

    ** Как мне добавить участников в команду? Должен ли я просто создать нового участника, присвоить идентификатор команды внешнему ключу и сохранить? Или есть более объектно-ориентированный способ (например, team.Add (teamMember))

1 Ответ

3 голосов
/ 08 мая 2009

Генерация дозвукового кода будет считывать связи внешних ключей в таблицах и создавать необходимые вспомогательные методы в классах таблиц. Класс Northwind Product имеет отношение PrimaryKey к классу OrderDetail. Дозвуковой генерирует метод

открытый Northwind.OrderDetailCollection OrderDetails ()

, чтобы получить строки OrderDetail как коллекцию OrderDetailCollection. Это BindingList, который вы можете изменить по мере необходимости и вызвать SaveAll () для сохранения списка. Нет глубокого сохранения, поэтому сохранение Product не сохранит связанные строки OrderDetail.

[Test]
public void Demo_Product_OrderDetails()
{
    Product product = new Product(3); // Read an existing row.
    OrderDetailCollection orderDetails = product.OrderDetails();
    Assert.IsTrue(orderDetails.Count == 12);
    foreach(OrderDetail orderDetail in orderDetails)
    {
        orderDetail.Discount -= 0; // Do something meaningful.
    }
    OrderDetail newDetail = new OrderDetail();
    newDetail.ProductID = 3;
    newDetail.OrderID = 10248;
    newDetail.UnitPrice = 7.00m;
    newDetail.Discount = 0.10f;
    newDetail.Quantity = 12;
    orderDetails.Add(newDetail);
    orderDetails.SaveAll();

    orderDetails = product.OrderDetails();
    Assert.IsTrue(orderDetails.Count == 13);

    OrderDetail.Destroy(newDetail.OrderID);

    orderDetails = product.OrderDetails();
    Assert.IsTrue(orderDetails.Count == 12);

}
...