#c# #entity-framework-4.1
#c# #entity-framework-4.1
Вопрос:
Я работаю над моделью сущностей POCO в существующей базе данных. Одна таблица имеет составной ключ
public class Table1
{
[Key]
public virtual int Key1 {get; set;}
[Key]
public virtual int Key2 {get; set;}
public virtual ICollection<Table2> Tables2 {get; set;}
//more properties here...
}
и вторая таблица без первичного ключа, но с 2 свойствами, ссылающимися на составной ключ Table1.
public class Table2
{
public virtual int Key1 {get; set;}
public virtual int Key2 {get; set;}
[InverseProperty("Tables2")]
public virtual Table1 Table1 {get; set;}
//more properties here...
}
ВОПРОС Возможно ли сопоставить эту ассоциацию с использованием DataAnnotations?
Если да, то как?
Комментарии:
1. является ли для EF объектом с таким количеством атрибутов POCO ?
Ответ №1:
Да, вы можете определить составной внешний ключ с аннотациями данных:
public class Table2
{
[ForeignKey("Table1"), Column(Order = 1)]
public virtual int Key1 {get; set;}
[ForeignKey("Table1"), Column(Order = 2)]
public virtual int Key2 {get; set;}
[InverseProperty("Tables2")]
public virtual Table1 Table1 {get; set;}
//more properties here...
}
Или альтернативно:
public class Table2
{
public virtual int Key1 {get; set;}
public virtual int Key2 {get; set;}
[InverseProperty("Tables2")]
[ForeignKey("Key1, Key2")]
public virtual Table1 Table1 {get; set;}
//more properties here...
}
Но реальная проблема в том, что Table2
у вас нет первичного ключа, который требуется Entity Framework. Я не думаю, что есть какой-либо обходной путь для решения этой проблемы, кроме добавления первичного ключа в таблицу.
Комментарии:
1. Спасибо! это то, что я искал. Я работаю с администраторами баз данных, чтобы получить для этой таблицы PK.