2015-03-15 2 views
3

У меня есть таблица ссылок с двумя внешними ключами. Вместе они являются основным ключом для таблицы. Я пытаюсь отобразить это в Linq:Linq 2 SQL: составной первичный ключ

[Table(Name = "PartToPart")] 
public class PartToPart 
{ 
    [Column(Name = "PartID", IsPrimaryKey = true)] 
    public int PartID { get; set; } 

    [Column(Name = "ParentPartID", IsPrimaryKey = true)] 
    public int ParentPartID { get; set; } 
} 

Я предполагаю, что это неправильно и сделать Linq предположить обе колонки являются первичным ключом сами по себе? Если я пытаюсь сохранение новых записей в эту таблицу, я получаю ошибку нарушения ограничения:

Violation of primary key constraint ... Cannot insert duplicate key in object dbo.PartToPart. The duplicate key value is ...

Я попытался вставить ключи вручную с помощью запроса INSERT и что работает просто отлично, так что я предполагаю, что мой стол настроено правильно , Странно, что вставка работает независимо от сообщения об ошибке.

Я проверил the docs и мне кажется, что это должно работать так, как у меня есть это:

If you designate more than one member of the class by using this property, the key is said to be a composite of the associated columns.

Любая помощь по этому вопросу? Спасибо.

+0

С атрибутом '[Table]' он должен быть LINQ-to-SQL, правильно? – xanatos

+0

Да, это Linq2SQL – Chris

+0

Код верный, если я правильно помню. Они оба установлены вручную программой или являются автоинкрементами? – xanatos

ответ

2

Правильное определение вашего класса. Вы записываете объекты с составными ключами точно так же, как вы написали. Обратите внимание, что как написано, ключи должны быть установлены с помощью кода C#, и они не являются автоматически увеличивающимися полями. Вы сказали мне, что это точно, так что это не проблема.

Учитывая ошибку, я скажу, что вы пытаетесь дважды вставить ту же запись (и/или вставки в два раза «пустую» запись, что тогда имеет PartID и ParentPartID набора на 0 по .NET)

+0

Еще раз спасибо. Как указано выше, мой код выполнялся дважды. – Chris

Смежные вопросы