Pregunta

  • ¿Cuáles son las formas de decirle a SubSonic acerca de la relación (solo claves foráneas u otros métodos también)?
  • Si tengo (por ejemplo) un objeto de equipo con miembros del equipo relacionados

    ** cómo accedo y actualizo a los miembros del equipo

    ** ¿Cómo actualizo a los miembros del equipo? ¿Guardar el objeto del equipo guarda los cambios de los miembros del equipo?

    ** ¿Cómo agrego miembros al equipo? ¿Acabo de crear un nuevo miembro, asignar la ID del equipo a la clave externa y guardar? ¿O hay una forma más orientada a objetos (por ejemplo, team.Add (teamMember))

¿Fue útil?

Solución

La generación de código subsónico leerá las relaciones de clave externa en las tablas y creará los métodos auxiliares necesarios en las clases de tabla. La clase de producto Northwind tiene una relación PrimaryKey con la clase OrderDetail. Subsonic genera el método

public Northwind.OrderDetailCollection OrderDetails ()

para obtener las filas OrderDetail como OrderDetailCollection. Esta es una BindingList que puede cambiar según sea necesario, y llame a SaveAll () para guardar la lista. No hay un ahorro profundo, por lo que guardar el Producto no guardará las filas relacionadas de 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);

}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top