ASP Boilerplate (EF) - Fluent Api - Таблица собственных ссылок, не использующая первичный ключ
Поэтому я должен импортировать таблицу из другой базы данных. Таблица ссылается сама на себя, используя собственный ключ, но я не могу доверять ключу, тем более что таблица, в которую я импортирую, будет для нескольких наборов данных.
Я использую Entity Framework и сначала свободно использую API, но у меня нет времени, чтобы найти решение этой проблемы.
Вот мой класс POCO (упрощенный только для необходимых точек данных):
public class Person
{
public virtual int Id { get; set; }
public virtual int personid { get; set; }
public virtual int? parentid { get; set; }
public virtual Person parent { get; set; }
public virtual ICollection<Person> children { get; set; }
}
Это была бы простая таблица со ссылками на себя, если бы я мог использовать Id, но я должен использовать personid. Я настроил идею свободного API, который мне нужен здесь, но EF продолжает смотреть на Id.
modelBuilder.Entity<Person>()
.HasOptional(p => p.parent)
.WithMany(p => p.children)
.HasForeignKey(p => p.parentid)
.WillCascadeOnDelete(false);
Есть ли обходные пути для заполнения коллекции с использованием personid в качестве уникального ограничения (которое еще не реализовано в EF6.1.2)?
Я также использую Asp.NetBoilerplate, поэтому некоторый контроль над моими сущностями, репозиториями и т. Д. Возможен, но не рекомендуется. Т.е. "Id" считается первичным ключом для любой и всех таблиц.
1 ответ
Хмм..
почему бы не использовать HasKey для определения столбца id??
modelBuilder.Entity<Person>()
.HasKey(p=> p.personId)
.HasOptional(p => p.parent)
.WithMany(p => p.children)
.HasForeignKey(p => p.parentid)
.WillCascadeOnDelete(false);