Предположим, у меня есть простая схема базы данных с таблицей клиентов и заказов с внешним ключом от заказов к клиентам и уникальный ключ по имени клиента.Как вставить в LINQ to SQL, когда у меня есть внешний ключ и уникальное ограничение?
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 к SQL сущностям очевидным образом, с Customer
лицами и Order
лица с один-ко-многим ассоциации из Customer
в Order
.
Проблема, с которой я столкнулась, возникает, когда я хочу ввести новый заказ для Джона, используя мои объекты LINQ. Я думал, что сделать это будет, чтобы получить объект Customer
для Джона и назначить его моему объекту 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, поэтому, думаю, я просто ошибаюсь. Как мне реализовать свой код для учета уникального ограничения?
Какое (внутреннее) сообщение об исключении вы получаете? –
@GertArnold [Вот полное исключение, которое было брошено.] (Http://pastebin.com/raw.php?i=9ikD71yg) –