У меня есть две таблицы, называемые пользователя и UserSession, есть два соотношения между этими двумя таблицами:Code First Invalid Column Name SecondaryUser_Id
UserSession.User -> User.UserSession
UserSession.SecondaryUser -> User.UserSessions
Пользователь UserSession всегда будет иметь пользователя, но может не иметь SecondaryUser.
Я пытаюсь сопоставить эти отношения с помощью кода Первый Свободный, ниже мои текущие отображения и определения классов:
UserSessionMap:
public UserSessionMap()
{
// Primary Key
this.HasKey(t => t.UserId);
// Properties
this.Property(t => t.UserId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
// Table & Column Mappings
this.ToTable("UserSession");
this.Property(t => t.UserId).HasColumnName("UserId");
this.Property(t => t.SecondaryUserId).HasColumnName("SecondaryUserId");
this.Property(t => t.RoleNameCompanyInfo).HasColumnName("RoleNameCompanyInfo");
this.Property(t => t.RecordCreate).HasColumnName("RecordCreate");
this.Property(t => t.RecordUpdate).HasColumnName("RecordUpdate");
// Relationships
this.HasRequired(t => t.User).WithRequiredPrincipal(p => p.UserSession);
this.HasOptional(t => t.SecondaryUser).WithMany(p => p.UserSessions).HasForeignKey(p=>p.SecondaryUserId);
}
Пользователь Карта:
public class UserMap : EntityTypeConfiguration<User>
{
public UserMap()
{
// Primary Key
this.HasKey(t => t.Id);
// Properties
...snip...
// Table & Column Mappings
this.ToTable("User");
this.Property(t => t.Id).HasColumnName("Id");
...snip...
}
}
Пользовательский субъект:
public partial class UserSession
{
public int UserId { get; set; }
[ForeignKey("SecondaryUser")]
public int? SecondaryUserId { get; set; }
public string RoleNameCompanyInfo { get; set; }
public DateTime RecordCreate { get; set; }
public DateTime RecordUpdate { get; set; }
public virtual User User { get; set; }
public virtual User SecondaryUser { get; set; }
}
объект пользователя:
public partial class User
{
public User()
{
this.Carts = new List<Cart>();
this.DirectDispenses = new List<DirectDispense>();
this.Downloads = new List<Download>();
this.MatchQuestionSessions = new List<MatchQuestionSession>();
this.Orders = new List<Order>();
this.UserSessions = new List<UserSession>();
this.UserUserRoles = new List<UserUserRole>();
}
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int CompanyId { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public string PasswordSalt { get; set; }
public string Role { get; set; }
public bool Active { get; set; }
public string ColibriUserId { get; set; }
public Nullable<int> DispenserId { get; set; }
public Nullable<System.Guid> PasswordResetCode { get; set; }
public Nullable<System.DateTime> PasswordResetSent { get; set; }
public System.DateTime RecordUpdate { get; set; }
public System.DateTime RecordCreate { get; set; }
public virtual ICollection<Cart> Carts { get; set; }
public virtual Company Company { get; set; }
public virtual ICollection<DirectDispense> DirectDispenses { get; set; }
public virtual ICollection<Download> Downloads { get; set; }
public virtual ICollection<MatchQuestionSession> MatchQuestionSessions { get; set; }
public virtual ICollection<Order> Orders { get; set; }
public virtual ICollection<UserSession> UserSessions { get; set; }
public virtual UserSession UserSession { get; set; }
public virtual ICollection<UserUserRole> UserUserRoles { get; set; }
}
Я также попытался добавить [ForeignKey ("SecondaryUserId") в собственность SecondaryUser без удачи.
Как правило, свойства UserId и SecondaryUserId должны отображаться в свойстве Id для пользователя. Ошибка EF генерируется:
System.Data.SqlClient.SqlException: Неверное имя столбца «SecondaryUser_Id».
Что я думаю, что делает это, ищет свойство SecondaryUser_Id в таблице User, которого, очевидно, нет. Как я могу сказать, чтобы посмотреть свойство Id на объекте User. Все статьи, которые я нашел, показывают, как сопоставить ПК с FK, которые не называются так, как ожидает EF, похоже, это случай противоположности, для которого я не могу найти примеров.
Похоже, что с такой же ошибкой на SO возникли подобные проблемы, но ни одно из этих решений не сработало для меня, и эта ситуация выглядит по-другому (как я уже сказал, это похоже на противоположность наиболее распространенным причина этой ошибки).