ASP.Net Entity Framework и внешние ключи - PullRequest
2 голосов
/ 03 января 2011

Я пытаюсь понять, как обрабатывать внешние ключи с помощью Entity Framework при редактировании или добавлении новой записи. Например, у меня есть таблица person, в которой timezone_id ссылается на мою таблицу часовых поясов.

Но модель, кажется, не включает timezone_id. Я вижу, что это новый способ ведения дел, но ... как мне сохранить мою запись?

Мой метод:

 public static string CreateUser(string username, string email, string password, string firstname, string surname, int timezoneId)
    {
        user u = new user();
        u.surname = surname;
        u.firstname = firstname;
        u.email = email;
        u.password = password;
        u.username = username;
        Db.AddTousers(u);

        Db.SaveChanges();

        return username;

    }

Я не могу сделать u.timezone_id = timezoneid;

У меня есть только u.timezone (который, кажется, является реальной сущностью) и u.timezoneReference, с которым я не уверен, что делать.

Ответы [ 3 ]

1 голос
/ 03 января 2011

Я думаю, что вы должны заполнить сущность часового пояса из базы данных, т.е.

u.timezone = DB.TimezoneSet.FirstOrDefault(tz => tz.Id == timezoneid);

при условии, что вы сгенерировали имя набора с помощью EF3; по умолчанию это будет DB.Timezones в EF4. Если это EF4, то вы также можете сгенерировать EDMX для этой таблицы с включенными столбцами идентификаторов - на первой странице мастера есть опция.

Свойство TimezoneReference используется для проверки загрузки дочерних объектов, их принудительной загрузки и т. Д.

1 голос
/ 03 января 2011

Если вы используете EF v1 и не хотите добавлять объект таким, какой он есть, вам нужно будет сделать это.

u.TimezoneReference.EntityKey = new EntityKey("DB.TimeZone", "ID", id)

id - это внешний ключ.

Если вы используете EF v4 и до сих пор не открыли поддельные ключи, то, я думаю, вы не отметили опцию генерации внешних ключей при создании модели.

1 голос
/ 03 января 2011

У меня есть только u.timezone

Да, модель должна отображать FK как свойство навигации.Просто назначьте там свой объект TimeZone.

...