Возможно то, что вы спрашиваете в общем с введенным EF Core 2.1 Типы сущностей с конструкторами с параметрами функция.Вам больше не нужен пустой конструктор - EF Core сможет использовать конструктор с параметром Guid id
.
Однако есть два ограничения, которые применяются к вашему свойству Id
.Во-первых, это свойство только для чтения (следовательно, поддерживается полем readonly
, которое может быть установлено только из конструктора).Эквивалент в вашем примере явного вспомогательного поля был бы, если бы вы определили его как private readonly Guid _id;
.Тогда пример конфигурации не будет работать.
В разделе документации для Свойства только для чтения говорится:
Как только свойства задаются с помощью конструктора, может иметь смысл сделать некоторые из них доступными для чтения.только.EF Core поддерживает это, но есть некоторые вещи, на которые следует обратить внимание:
- Свойства без установщиков не отображаются по соглашению.(Это имеет тенденцию отображать свойства, которые не должны отображаться, такие как вычисляемые свойства.)
- Для использования автоматически сгенерированных значений ключей требуется свойство ключа, предназначенное для чтения и записи, поскольку значение ключа должно быть установленоГенератор ключей при вставке новых объектов.
Обратите внимание на второй пункт, потому что это вторая проблема.Свойство Id
в соответствии с соглашением является PK, а Guid
и PK числового типа в соответствии с соглашением автоматически генерируются .
Так что вам нужно выбрать один из двух вариантов - либо сделатьId
не только для чтения , добавив private set;
, как указано в ссылке, или (что является ответом на вопрос "Как заставить EF Core работать с JUST a { get; }
«) сделать его не сгенерированным автоматически , используя следующую свободную конфигурацию:
modelBuilder.Entity<Foo>()
.Property(e => e.Id)
.ValueGeneratedNever();