Entity Framework код-сначала сохранить много-много раз - PullRequest
0 голосов
/ 17 сентября 2011

У меня проблемы с отправкой данных о 3-м навигационном свойстве первого приложения с кодом структуры сущности.

Моя модель выглядит следующим образом: (предположим, есть модель под названием Пользователь и Компания)

public enum UserCompanyRoleType
{
    Administrator,
    Creator,
    Follower
}
/// <summary>
/// User that belongs to a company
/// </summary>
public class UserCompany
{

    public int UserCompanyId { get; set; }

    public virtual User User { get; set; }
    public virtual int UserId { get; set; }

    public virtual Company Company { get; set; }
    public virtual int CompanyId { get; set; }

    public virtual IEnumerable<UserCompanyRole> Roles { get; set; }
}

public class UserCompanyRole
{

    public virtual int UserCompanyRoleId { get; set; }
    public UserCompanyRoleType RoleType { get; set; }

    public virtual UserCompany UserCompany { get; set; }
    public virtual int UserCompanyId { get; set; }

}

Вот код услуги:

var creator = new UserCompany { UserId = userId };
//add the user as both creator and admin
creator.Roles = new List<UserCompanyRole> { new UserCompanyRole{RoleType = UserCompanyRoleType.Creator}}; //somehow this does not reach the database

company.Users = new List<UserCompany>();
company.Users.Add(creator);

db.Companies.Add(company);
db.SaveChanges();

Это сохраняет как компанию, так и связанную пользовательскую компанию, но две роли не сохраняются. Как сохранить 2 роли в строке, которую я прокомментировал?

1 Ответ

1 голос
/ 17 сентября 2011

Необходимо установить для свойства Roles тип ICollection<UserCompany>.

public class UserCompany
{

    public int UserCompanyId { get; set; }

    public virtual User User { get; set; }
    public virtual int UserId { get; set; }

    public virtual Company Company { get; set; }
    public virtual int CompanyId { get; set; }

    public virtual ICollection<UserCompanyRole> Roles { get; set; }
}

Перечисления не поддерживаются в EF 4.1, поэтому для сопоставления этого свойства необходимо использовать поле int.

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