gpt4 book ai didi

asp.net-mvc - 如何确定添加到存储库的聚合根的 ID?

转载 作者:行者123 更新时间:2023-12-03 03:35:42 24 4
gpt4 key购买 nike

假设我有一个通用存储库接口(interface),如下所示:

public interface IRepository<T>
{
Add(T item);
Delete(int itemId);
Update(T item);
}

通常,通过 IRepository.Add() 添加的项目的新 ID 将由某些后端数据库确定,但只有在整个事务/工作单元提交后才会确定。所以我相当确定 IRepository.Add() 返回添加项的新 ID 是错误的。存储库确实不应该知道有关 ID 是如何创建的任何信息。这是正确的吗?

如果是这种情况,还如何确定添加到存储库中的项目的新 ID,或者我什至应该这样做?我知道像 NHibernate 这样的 ORM 能够自动用具有正确 ID 的新对象替换内存中的对象,但我试图在设计存储库时不考虑任何特定的 ORM 实现。

例如,假设我有一个网站,客户可以在其中下订单。新客户选择结帐并被发送到表格以填写其详细信息。此信息用于创建存储在 CustomerRepository 中的 Customer 对象。现在需要创建他们的订单信息,但订单需要通过 ID 引用客户?

Customer newCustomer = new Customer(first, last, address, phone dateOfBirth);
customerRepository.Add(newCustomer);

//How would I determine customerId??
Order newOrder = new Order(customerId, shippingAddress, billingAddress);
newOrder.AddOrderItem("widget");
newOrder.AddOrderItem("doohicky");
newOrder.AddOrderItem("stuff");

最佳答案

在您提供的示例中,我将一步创建 CustomerOrder,并将域对象传递给域对象,而不是传递 Id:

Customer newCustomer = new Customer(first, last, address, phone dateOfBirth);

// Pass the customer rather than the CustomerId:
Order newOrder = new Order(newCustomer , shippingAddress, billingAddress);
newOrder.AddOrderItem("widget");
newOrder.AddOrderItem("doohicky");
newOrder.AddOrderItem("stuff");

customerRepository.Add(newCustomer);
orderRepository.Add(newOrder);

// SaveChanges()

...保存更改后,框架会自动填充 CustomerOrder 的 Id,并填充 Customer.IdOrder.customerId、(等)凭借已分配给 OrderCustomer 对象。

关于asp.net-mvc - 如何确定添加到存储库的聚合根的 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6276627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com