У меня есть класс с именем “Власть” в библиотеке, созданной методом Database First
Поскольку мы знаем, что база данных сначала генерирует все классы автоматически, также основной ключ, определенный для каждого класса, я также создал класс “Пользователь”, обладает свойством класса “Власть”, в другой библиотеке у меня есть класс “PacsUser”, полученный из “Пользователь”. Я использую код первый подход к разработке “PacsUser”, когда я хочу, чтобы PacsUser возвращал конкретного пользователя, он дает мне “EntityType”, который не имеет определенного ключа “
Я должен определить ключ для класса Authority в OnModelCreating для PacsUserDBContext, например:
modelBuilder.Entity<Authority>().HasKey(e => e.AID);
почему DbModelBuilder в PacsUserDBContext автоматически распознает первичный ключ Управления? или, по крайней мере,
modelBuilder.Entity<Authority>().ToTable("Authority");
все работает нормально (например, например).
Они оба (Административный отсек DB-First и PacsUser по коду-First) используют Entity Framework ORM, поэтому
Почему код сначала не знает первичный ключ органа власти?
Есть ли способ, которым DbModelBuilder автоматически распознает первичные ключи?
Любая идея будет оценена по достоинству.
Первичный ключ. Первый код означает, что свойство является первичным ключом, если свойство класса называется “идентификатор” (не чувствителен к регистру) или имя класса, за которым следует “ID”. Если тип свойства первичного ключа является числовым или GUID, он будет настроен как столбец идентификатора.
Например, если у вас есть следующий класс
public class Department
{
// Primary key
public int DepartmentID { get; set; }
. . .
}
EF будет использовать DepartmentID
качестве первичного ключа, в качестве альтернативы вы можете использовать Id
вместо DepartmentID
. Но ваш ключ класса Authority
(AID
) не следует выше соглашения. поэтому вам нужно определить настраиваемое сопоставление для него или изменить AID
на Id
или AuthorityId
.
Вы можете видеть более общие соглашения EF по умолчанию здесь