В EF, если модель имеет свойство ID
как int, ей следует автоматически установить для него PK и автоинкремент, если не указано иное. Если вопрос просто «могу ли я получить автоматически сгенерированный идентификатор без сохранения в БД», ответ - нет, вы не можете.
Чтобы получить идентификатор для автоматически сгенерированного столбца идентификаторов, вы сначала необходимо сохранить изменения в базе данных. После этого будет установлено свойство ID
новой записи.
MyClass newClass = new MyClass() {
Name = "MyName",
Amount = 10
};
_myDbContext.MyClasses.Add(newClass);
_myDbContext.SaveChanges();
//newClass.ID will be set here.
Если вы используете автоматически сгенерированный столбец, это единственный способ сделать это. Если вы хотите установить идентификатор самостоятельно - например, с помощью uuid - вы можете внести это изменение в столбец идентификатора. В случае использования uuid, которое может включать изменение типа столбца ID на строку, и вы захотите установить MaxLength
на любую длину, которую вы выбираете использовать.
class MyClass
{
[MaxLength(50)]
public string ID { get; set; }
public string Name { get; set; }
public int Amount { get; set; }
}
Затем вы можете вручную назначить идентификатор перед записью изменений в БД.
Кроме того, в этой строке
_myDbContext.MyClasses.ToList(); // forcing to have all members in "_myDbContext.MyClasses.Local". Otherwise only changed/added etc. members appear.
Я не уверен, что понимаю вашу логику c здесь, но нет причин делать это просто для сохранения новой записи в базе данных. и это резко замедлит работу вашего приложения по мере роста базы данных. В существующем состоянии вы запрашиваете список каждого элемента в таблице, но даже не сохраняете его в переменную, поэтому эта строка ничего не делает, кроме как для замедления вашей программы.