У меня есть две таблицы: Пользователи и компании:
public class User
{
// Properties
public long Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Username { get; set; }
public long AgencyId { get; set; }
public Company Company { get; set; }
// Custom Propreties
[ScaffoldColumn(false)]
public string FullName
{
get
{
return FirstName + " " + LastName;
}
}
}
public class Company
{
public long Id { get; set; }
public string Name { get; set; }
public virtual ICollection<User> Users { get; set; }
}
Конфигурация такая же ...
public class UserConfiguration : EntityTypeConfiguration<User>
{
public UserConfiguration()
{
this.HasKey(x => x.Id);
this.Property(x => x.Id);
this.Property(x => x.FirstName).IsRequired();
this.Property(x => x.LastName).IsRequired();
this.Property(x => x.Username).IsRequired();
this.Property(x => x.CompanyId).IsRequired();
this.HasRequired(user => user.Company).WithMany().HasForeignKey(user => user.CompanyId);
}
}
public class CompanyConfiguration : EntityTypeConfiguration<Company>
{
public CompanyConfiguration()
{
this.ToTable("Companies");
this.HasKey(x => x.Id);
this.Property(x => x.Id);
this.Property(x => x.Name).IsRequired();
this.HasMany(company => company.Users).WithRequired().HasForeignKey(user => user.CompanyId);
}
}
Если я создаю представление с компаниями, чтобы показать каждую компанию и сделать один столбец «Количество пользователей в компании», то представление будет отображаться, как и ожидалось, с указанием количества пользователей в каждой компании. Тем не менее, когда я пытаюсь показать каждого пользователя в представлении и показать там Company.Name в столбце, то он говорит, что компания является нулевой. Может кто-нибудь объяснить, если мои пользовательские отношения между Пользователем и Компанией нарушаются?
************ РЕДАКТИРОВАТЬ *************** *
public UserConfiguration()
{
this.HasKey(x => x.Id);
this.Property(x => x.Id);
this.Property(x => x.FirstName).IsRequired();
this.Property(x => x.LastName).IsRequired();
this.Property(x => x.Username).IsRequired();
this.Property(x => x.CompanyId).IsRequired();
this.HasRequired(user => user.Company).WithMany().HasForeignKey(user => user.CompanyId);
this.HasMany(user => user.AdministratorApplications)
.WithMany(application => application.Administrators)
.Map(map =>
{
map.ToTable("ApplicationAdministrators");
map.MapLeftKey("ApplicationId");
map.MapRightKey("UserId");
});
}
public ApplicationConfiguration()
{
this.HasKey(x => x.Id);
this.Property(x => x.Name).IsRequired();
this.Property(x => x.Accronym).IsRequired();
this.Property(x => x.Description);
this.HasMany(application => application.Administrators)
.WithMany(user => user.AdministratorApplications)
.Map(map =>
{
map.ToTable("ApplicationAdministrators");
map.MapLeftKey("UserId");
map.MapRightKey("ApplicationId");
});
}
public ApplicationAdministratorConfiguration()
{
this.ToTable("ApplicationAdministrators");
this.HasKey(x => x.Id);
this.Property(x => x.Id);
this.Property(x => x.ApplicationId).IsRequired();
this.Property(x => x.UserId).IsRequired();
this.HasRequired(appAdmin => appAdmin.Application).WithMany().HasForeignKey(appAdmin => appAdmin.ApplicationId);
this.HasRequired(appAdmin => appAdmin.User).WithMany().HasForeignKey(appAdmin => appAdmin.UserId);
}
Вот класс ApplicationAdministrator
public class ApplicationAdministrator
{
[Column("Id")]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[HiddenInput]
public long Id { get; set; }
[Display(Name = "Application")]
public long ApplicationId { get; set; }
public virtual Application Application { get; set; }
[Display(Name = "Administrator")]
public long UserId { get; set; }
public virtual User User { get; set; }
}
И, наконец, ошибка
Указанная схема недействительна. Ошибки: (144,6): ошибка 0019:
EntitySet 'UserApplication' со схемой 'dbo' и таблицей
ApplicationAdministrators уже определены. Каждый EntitySet должен
обратитесь к уникальной схеме и таблице.
Строка 15: публичные пользователи IQueryable
Строка 16: {
Строка 17: get {return context.Users.Include ("Администраторские приложения"). Include ("Компания"); }
Строка 18:}
Строка 19: