Свяжите 2 таблицы вместе (отношения один ко многим) - PullRequest
3 голосов
/ 05 октября 2011

Я довольно новичок в c #, EF Code. Прежде всего, поэтому мой вопрос может быть простым.

Я пытаюсь создать очень простой логин.У каждого пользователя должен быть тип (администратор или клиент).Как я могу привязать usertype к моей таблице user, не генерируя новый тип каждый раз, когда я вставляю нового пользователя в DB?Вот мой код первого класса:

public class User
{
    public int Id { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public bool Active { get; set; }
    public UserType TypeId { get; set; }
}

public class UserType
{
    public int Id { get; set; }
    public string Type { get; set; }
}

public enum TypeEnum
{
    Admin,
    Client
}

Когда я запускаю приложение, я хочу иметь возможность создавать 2 таблицы:

  • Пользователи, которые пусты
  • UserTypes, который должен содержать 2 типа (Admin и Client).

Затем, каждый раз, когда я регистрирую нового пользователя, поэтому каждый раз, когда я добавляю пользователя в таблицу Users, я хочу иметь возможность использоватьТаблица пользовательских типов.

Ответы [ 2 ]

2 голосов
/ 05 октября 2011

С новой версией EF (в настоящее время выходящей за рамки официальной версии 4.1: Entity Framework, июнь 2011 г., CTP ) вы также можете сделать следующее:

public class User
{
    public int Id { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public bool Active { get; set; }
    public UserType Type { get; set; }
}

public enum UserType
{
    Admin = 1,
    Client = 2,
}

Данные будут сохранены как целые числав вашей базе данных, но в вашем приложении вы можете использовать свой enum следующим образом:

    var newUser = new User { Type = UserType.Admin, Username = ... };

    context.Users.Add(newUser);

    context.SaveChanges();
2 голосов
/ 05 октября 2011

Когда я запускаю приложение, я хочу иметь возможность создавать 2 таблицы ...

Не уверен, правильно ли я это понимаю, но вы можете seed исходные данные в базу данных с EF Code-First.Пример того, как это сделать, приведен здесь:

Entity Framework Вставка исходных данных при перестроении

Если вы действительно хотите воссоздавать таблицы при каждом запуске приложения, вы можетеиспользуйте инициализатор DropCreateDatabaseAlways<T>, как указано в примере.

Затем, каждый раз, когда я регистрирую нового пользователя, поэтому каждый раз, когда я добавляю пользователя в таблицу Users, я хочу иметь возможность использовать UserTypes.таблица.

Для этого вы должны загрузить существующий UserType, который вы хотите назначить из базы данных, чтобы он был присоединен к контексту, а затем создать нового пользователя:

using (var context = new MyContext())
{
    var userType = context.UserTypes
        .Single(u => u.Type == TypeEnum.Admin.ToString());
    var newUser = new User { TypeId = userType, Username = ... etc. };

    context.Users.Add(newUser);

    context.SaveChanges();
}

Присоединение к контексту - либо путем загрузки из базы данных, либо явным вызовом Attach - гарантирует, что UserType не будет продублирован, т. Е. Команда INSERT не будет отправлена ​​в базу данных для UserType.

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