Я использую Visual Studio 2008, C#, LINQ to SQL и используя datbase-редактор графического интерфейса для создания базы данных. Я хочу создать отношения от 1 до многих, но в моем случае у 1 объекта есть 2 первичных ключа. С помощью графического интерфейса edtior я создал ассоциацию, но когда программа запускается и база данных созданы, я получаю ошибку:Ассоциация Linq-To-SQL с несколькими внешними ключами Проблема
«ссылочная таблица должна иметь первичный или потенциальный ключ [FK Name = Screen_Pixel].»
XML, созданный в DBML выглядит как:
<Table Name="Screen">
<Column Name="PKA1" Type="System.Int64" IsPrimaryKey="true" CanBeNull="false" UpdateCheck="Never" />
<Column Name="PKA2" Type="System.Int32" IsPrimaryKey="true" CanBeNull="false" UpdateCheck="Never" />
<Association Name="Screen_Pixel" Member="Pixels" ThisKey="PKA1,PKA2" OtherKey="PKB1,PKB2" Type="Pixel" />
</Table>
<Table Name="Pixel>
<Column Name="PKB1" Type="System.Int64" IsPrimaryKey="true" CanBeNull="false" UpdateCheck="Never" />
<Column Name="PKB2" Type="System.Int32" IsPrimaryKey="true" CanBeNull="false" UpdateCheck="Never" />
<Column Name="PKB3" Type="System.Int32" IsPrimaryKey="true" CanBeNull="false" UpdateCheck="Never" />
<Association Name="Screen_Pixel" Member="Screen" ThisKey="PKB1,PKB2" OtherKey="PKA1,PKA2" Type="Screen" IsForeignKey="true" />
</Table>
сформированные ассоциации в C# коде:
[Association([email protected]"Screen_Pixel", [email protected]"_Screen", [email protected]"PKA1,PKA2", [email protected]"PKB1,PKB2", IsForeignKey=true)]
[Association([email protected]"Screen_Pixel", [email protected]"_Pixels", [email protected]"PKB1,PKB2", [email protected]"PKA1,PKA2")]
Любые идеи?
Я не был оригинальным автором базы данных, и именно так была написана база данных. Я надеялся не делать этого, потому что проще и интуитивно, чтобы несколько внешних ключей определяли объекты. Если я не услышу больше ответов в понедельник, я дам ему шанс. – John
Неплохая идея использовать составные первичные ключи, когда оба значения неизменяемы и определяют уникальность строки, а в противном случае - просто плохой совет. Если решение ORM не может обрабатывать составные первичные ключи, это недостаток решения ORM. Мы не должны моделировать наши данные, чтобы соответствовать ограничениям ORM. –