如何在SubSonic中使用“一对多”关系

时间:2009-05-08 05:54:31

标签: subsonic foreign-key-relationship

  • 告诉SubSonic关于这种关系的方法有哪些(只有外键?或其他方法)?
  • 如果我(例如)有相关团队成员的团队对象

    **如何从团队中访问和更新团队成员

    **如何更新团队成员?保存团队对象是否可以保存团队成员的更改

    **如何向团队添加成员?我只是创建一个新成员,将团队ID分配给外键并保存?或者是否有更面向对象的方式(例如team.Add(teamMember))

1 个答案:

答案 0 :(得分:3)

子代码生成将读取表中的外键关系,并在表类中创建所需的辅助方法。 Northwind Product类与OrderDetail类具有PrimaryKey关系。 Subsonic生成方法

public Northwind.OrderDetailCollection OrderDetails()

将OrderDetail行作为OrderDetailCollection获取。这是一个BindingList,您可以根据需要进行更改,并调用SaveAll()来保存列表。没有深度保存,因此保存产品不会保存相关的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);

}