С EF CodeFirst, как я могу указать идентификатор при создании объекта? - PullRequest
2 голосов
/ 11 октября 2011

У меня есть следующие объекты:

public class User {
    int Id { get; set; }
    string Name { get; set; }
    IList<Job> Jobs { get; set; }
}

public class Job {
    int Id { get; set; }
    DateTime StartTime { get; set; }   // other fluff values here
    User User { get; set; }
}

Я уже установил отношение «многие ко многим» между User и Job (в зависимости от ситуации), но мне хотелось быуказать Job.Id при их создании.Я могу гарантировать, хотя, возможно, Entity не может, что идентификаторы уникальны, поскольку они являются PK другой таблицы в другой системе.

Следующий код иллюстрирует, что я хочу работать:

var user = db.Users.Create ();
var job = new Job();
job.Id = 42; // id from other service
user.Jobs.Add (job);

db.Users.Add (user);
db.Save ();

Некоторый код опущен для краткости, и, пожалуйста, дайте мне знать, если я пропустил что-то, что оказывается необходимым.Мой User создается и вставляется, мой Job создается и вставляется, но Job.Id равно 1 вместо 42.

Чего мне не хватает?

1 Ответ

5 голосов
/ 11 октября 2011
public class Job {
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    int Id { get; set; }
    DateTime StartTime { get; set; }   // other fluff values here
    User User { get; set; }
}

Должен делать то, что вам нужно.

От DataAnotations

Установка атрибута DatabaseGeneratedAttribute для столбца в Identity или Computed заставляет значение для столбца быть извлеченным из сервер в качестве идентификатора или вычисляемого значения при вызове SaveChanges. Свойства идентичности читаются из источника данных, когда тип сначала сохраняются, но впоследствии предполагается, что они не изменились. вычисленный свойства читаются каждый раз, когда вызывается SaveChanges. Ничего не указывает что это не свойство, сгенерированное сервером. Идентификация по умолчанию значение для свойств целочисленного ключа при работе с Code First.

База данныхСозданная ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...