WCF RIA Services помнил эту ситуацию при создании.Вы можете легко сделать все это за один SubmitChanges
запрос и за одну транзакцию базы данных (в зависимости от вашей БД и / или ORM).Однако, если вы предоставите больше информации о ваших объектах (POCO, EF и т. Д.), Вы получите лучший ответ.
Тем не менее, я сделаю дикое предположение о ваших объектах, как определено всервер.
public class Product
{
[Key]
public int? ProductID { get; set; }
// ... more properties ...
[Association("Product-ProductDollars", "ProductID", "ProductID", IsForeignKey = false)]
[Include]
[Composition]
public ICollection<ProductDollar> ProductDollars { get; set; }
}
public class ProductDollar
{
[Key]
public int? ProductDollarID { get; set; }
public int? ProductID { get; set; }
// ... more properties ...
[Association("Product-ProductDollars", "ProductID", "ProductID", IsForeignKey = true)]
[Include]
public Product Product { get; set; }
}
А ваш DomainService выглядит примерно так:
public class ProductDomainService : DomainService
{
public IQueryable<Product> GetProducts()
{
// Get data from the DB
}
public void InsertProduct(Product product)
{
// Insert the Product into the database
// Depending on how your objects get in the DB, the ProductID will be set
// and later returned to the client
}
public void InsertProductDollar(ProductDollar productDollar)
{
// Insert the ProductDollar in the DB
}
// Leaving out the Update and Delete methods
}
Теперь на вашем клиенте у вас будет код, который создает и добавляет эти сущности.
var context = new ProductDomainContext();
var product = new Product();
context.Products.Add(product);
product.ProductDollars.Add(new ProductDollar());
product.ProductDollars.Add(new ProductDollar());
context.SubmitChanges();
В результате один запрос отправляется на DomainService
.Однако WCF RIA разбивает это ChangeSet
, содержащее 3 вставки, на 3 вызова для ваших DomainService
методов:
InsertProduct(Product product)
InsertProductDollar(ProductDollar productDollar)
InsertProductDollar(ProductDollar productDollar)
Если ваш DomainService
выполняет все вставки в одной транзакции, ProductID может правильно управляться вашим ORM.