c# - 当我有外键和唯一约束时,如何在 LINQ to SQL 中插入?

标签 c# .net linq-to-sql foreign-keys unique-constraint

假设我有一个简单的数据库架构,其中包含一个客户和订单表,其中包含一个从订单到客户的外键,以及一个关于客户名称的唯一键。

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实体和 Order具有来自 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 的新手,所以我认为我只是错误地处理了这个问题。我应该如何实现我的代码以解决唯一约束?

最佳答案

线

db.Orders.InsertOnSubmit(order);

标记要插入的整个对象图。因此,如果您将该行移动到 Order order = new Order(); 的正下方,则只有该订单被标记为插入。这意味着对于新客户,您也必须调用 InsertOnSubmit

关于c# - 当我有外键和唯一约束时,如何在 LINQ to SQL 中插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15818952/

相关文章:

c# - 在 LINQ 的 Entity Framework 中传入实体的属性

sql-server - 使用相当于 sql IN 运算符的 linq

c# - 从 asp.net core 身份验证 Web 应用程序获取 Microsoft Graph 的访问 token

c# - 仅在必要时刷新访问 token

.net - Entity Framework 4-继承

c# - 模拟 DbSet 不返回对象

c# - LINQ to SQL - 如何高效地对多个条件执行 AND 或 OR 搜索

c# - Asp.net 从代码后面添加表不能按预期工作

c# - lambda 表达式的数据类型是什么?

.net - WCF通过防火墙推送到客户端?