Я относительно новичок в Entity Framework 4.
Мой проект состоит из проекта WebApplication & ClassLibrary. Мне пришлось использовать генератор сущностей ADO.Net POCO, так как у меня есть несколько файлов edmx с некоторыми общими моделями между ними в проекте ClassLibrary.
Внутри edmx у меня есть таблицы для User, Role & UserRole (содержащие только 2 столбца внешних ключей, UserID & RoleID). Entity Framework создал две модели, а именно User и Role, со свойствами навигации Roles и Users соответственно. Я удалил definingQuery из .edmx, что позволяет мне добавлять записи в таблицу UserRole.
В моей веб-форме у меня есть этот код:
Чтобы вставить роль:
User user = new User(iUserID); //initializes the the user object with the user info
user.AddRole(RoleID); //passes in the roleid that needs to be inserted`
Чтобы удалить роль пользователя:
User user = new User(iUserID); //initializes the the user object with the user info
user.RemoveRole(RoleID); //passes in the roleid that needs to be deleted`
Содержимое класса частичного пользователя (конструктор и 2 метода):
public User(short UserID)
{
using (SecurityEntities Context = new SecurityEntities())
{
User user = Context.Users.Where(ua => ua.UserID == UserID).Single<User>();
this.UserID = user.UserID;
// etc...
}
}
public void AddRole(short roleID)
{
using (SecurityEntities Context = new SecurityEntities())
{
Role role = Context.Roles.Where(r => r.RoleID == roleID).Single<Role>();
Context.AttachTo("Users", this);
this.Roles.Add(role);
Context.SaveChanges();
}
}
public void RemoveRole(short roleID)
{
using (SecurityEntities Context = new SecurityEntities())
{
Role role = Context.Roles.Where(r => r.RoleID == roleID).Single<Role>();
Context.AttachTo("Users", this);
this.Roles.Remove(role);
Context.SaveChanges();
}
}
Мои вопросы
- В методе AddRole, если я не использую AttachTo (), в таблицу User вводится повторяющаяся запись о текущем пользователе, а роль добавляется в UserRole. Почему attachTo () предотвращает это?
- В методе RemoveRole код работает без ошибок, но запись в таблице не удаляется. Почему?
Кто-нибудь может мне помочь?