假设我有一个简单的数据库模式,其中包含一个客户和订单表,其中包含从订单到客户的外键,以及客户名称的唯一键。
Customers
-----------
[CustomerID] INT NOT NULL
[Name] VARCHAR(50) NOT NULL
Orders
-----------
[OrderID] INT NOT NULL
[CustomerID] INT NOT NULL
+------------+------+ +---------+------------+
| CustomerID | Name | | OrderID | CustomerID |
|------------+------+ +---------+------------+
| 1 | John | | 1 | 1 |
+------------+------+ +---------+------------+
我以显而易见的方式设置了 LINQ to SQL 实体,其中包含一个Customer
实体和一个具有从toOrder
的一对多关联的实体。Customer
Order
当我想使用我的 LINQ 实体为 John 输入新订单时,我遇到了这个问题。我认为这样做的方法是Customer
为 John 获取实体并将其分配给我的Order
实体,然后提交,但它不起作用。这是我执行此操作的 C# 代码。
using (var db = new DataClassesDataContext())
{
Order order = new Order();
Customer existingCustomer = db.Customers.FirstOrDefault(c => c.Name == "John");
if (existingCustomer == default(Customer))
{
Customer customer = new Customer();
customer.Name = "John";
order.Customer = customer;
}
else
{
order.Customer = existingCustomer;
}
db.Orders.InsertOnSubmit(order);
db.SubmitChanges();
}
我已经验证我确实在提交之前分配existingCustomer
给我Order
,但尽管如此,当我尝试提交时我仍然收到唯一键约束错误。
我对 LINQ to SQL 很陌生,所以我认为我只是在错误地处理这个问题。我应该如何实现我的代码来解决唯一约束?