【问题标题】:How to use "one to many" relations in SubSonic如何在 SubSonic 中使用“一对多”关系
【发布时间】:2009-05-08 05:54:31
【问题描述】:
  • 有哪些方法可以将关系告知 SubSonic(仅外键?还是其他方法)?
  • 如果我有(例如)一个包含相关团队成员的团队对象

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

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

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

【问题讨论】:

    标签: subsonic foreign-key-relationship


    【解决方案1】:

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

    public 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);
    
    }
    

    【讨论】:

    • 外键关系是在 SubSonic 中执行此操作的唯一方法吗?有什么命名约定吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    相关资源
    最近更新 更多