Я пытаюсь охватить ядро asp.net путем миграции моего существующего приложения с .net 4.6.2 с EF6 на .net Core 2.2 с EF Core.
Учитывая, что у меня есть существующая база данных, я сгенерировал модель из базы данных, чтобы начать с нее. Все имена моих столбцов используют подчеркивания, и там, где находятся внешние ключи, все они начинаются с имени таблицы.
В EF Core он настаивает на том, чтобы имена моих столбцов кода менялись с Manager_UserLogin_ID на ManagerUserLoginId, что нормально, и я могу просмотреть свой код
Проблема возникает, когда я пытаюсь сделать запрос UserLogin и Manager, используя include
__DB.UserLogin.Include(x=>x.Manager).First();
При попытке выполнить запрос пытается включить столбец UserLoginId в запрос Manager, а также столбец Manager_UserLogin_ID.
Классы следующие
public partial class Manager
{
public int ManagerId { get; set; }
public int ManagerCompanyId { get; set; }
public int ManagerUserLoginId { get; set; }
public virtual Company ManagerCompany { get; set; }
public virtual UserLogin ManagerUserLogin { get; set; }
}
public partial class UserLogin
{
public UserLogin()
{
Manager = new HashSet<Manager>();
}
public int UserLoginId { get; set; }
public string FullName { get; set; }
public virtual ICollection<Manager> Manager { get; set; }
}
public partial class Company
{
public Company()
{
Manager = new HashSet<Manager>();
}
public int CompanyId { get; set; }
public string CompanyName { get; set; }
public virtual ICollection<Manager> Manager { get; set; }
}
Контекст EF Core имеет следующий
protected override void OnModelCreating(ModelBuilder modelBuilder
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Company>(entity =>
{
entity.HasKey(e => e.CompanyId).HasName("PK_Company_ID");
entity.Property(e => e.CompanyId).HasColumnName("Company_ID");
entity.Property(e => e.CompanyName)
.IsRequired()
.HasColumnName("Company_Name")
.HasMaxLength(200);
modelBuilder.Entity<Manager>(entity =>
{
entity.HasKey(e => e.ManagerId)
.HasName("PK_Manager_ID")
.ForSqlServerIsClustered(false);
entity.HasIndex(e => new { e.ManagerCompanyId, e.ManagerUserLoginId })
.HasName("IX_Manager")
.IsUnique()
.ForSqlServerIsClustered();
entity.Property(e => e.ManagerId).HasColumnName("Manager_ID");
entity.Property(e => e.ManagerCompanyId).HasColumnName("Manager_Company_ID");
entity.Property(e => e.ManagerUserLoginId).HasColumnName("Manager_UserLogin_ID");
entity.HasOne(d => d.ManagerCompany)
.WithMany(p => p.Manager)
.HasForeignKey(d => d.ManagerCompanyId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_Manager_Company_ID");
entity.HasOne(d => d.ManagerUserLogin)
.WithMany(p => p.Manager)
.HasForeignKey(d => d.ManagerUserLoginId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_Manager_UserLogin_ID");
});
modelBuilder.Entity<UserLogin>(entity =>
{
entity.HasKey(e => e.UserLoginId).HasName("PK_UserLogin_ID");
entity.HasIndex(e => e.UserLoginUid)
.HasName("IX_UserLogin_UID")
.IsUnique();
entity.Property(e => e.UserLoginId).HasColumnName("UserLogin_ID");
entity.Property(e => e.FullName)
.IsRequired()
.HasColumnName("Full_Name")
.HasMaxLength(300);
entity.Property(e => e.UserLoginUid).HasColumnName("UserLogin_UID");
});
А вот запрос от Sql Profiler
exec sp_executesql N'SELECT [x.Manager].[Manager_ID], [x.Manager].[Manager_Company_ID], [x.Manager].[Manager_UserLogin_ID], , [x.Manager].[UserLoginId]
FROM [Manager] AS [x.Manager]
INNER JOIN (
SELECT TOP(1) [x0].[UserLogin_ID]
FROM [UserLogin] AS [x0]
WHERE [x0].[UserLogin_UID] = @____UID_0
ORDER BY [x0].[UserLogin_ID]
) AS [t] ON [x.Manager].[Manager_UserLogin_ID] = [t].[UserLogin_ID]
ORDER BY [t].[UserLogin_ID]',N'@____UID_0 uniqueidentifier',@____UID_0='F55C9BBB-C7FF-4C87-B834-B2FE6B0F0B17'
Может кто-нибудь помочь мне диагностировать и устранить эту проблему?