【发布时间】:2021-11-02 11:45:27
【问题描述】:
我正在使用代码优先方法(EF Core 5 + SQL Server)开发一个应用程序。
我有一些包含数据的表,然后是 2 个连接表。
我遇到的问题是 EF 以某种方式在连接表中创建了重复的列。例如。 SessionId 和 SessionId1。我不知道为什么。
这里有一些来自代码的sn-ps以便更好地理解:
会话表:
public class Session
{
public long Id { get; set; }
public string Name { get; set; }
public long EventId { get; set; }
public virtual Event Event { get; set; }
public virtual UserSessionRole UserSessionRole { get; set; }
}
事件表:
public class Event
{
public long Id { get; set; }
public string Name { get; set; }
public DateTime Date { get; set; }
public virtual List<Session> Sessions { get; set; }
}
连接表:
public class UserSessionRole
{
public long Id { get; set; }
public long SessionId { get; set; }
public long RoleId { get; set; }
public long UserId { get; set; }
public long EventId { get; set; }
public virtual Session Session { get; set; }
public virtual Event Event { get; set; }
public virtual Role Role { get; set; }
public virtual User User { get; set; }
}
我使用 fluent API 来定义关系等。例如。会话设置:
// Map entities to tables
modelBuilder.Entity<Session>().ToTable("sessions");
// Configure Primary Keys
modelBuilder.Entity<Session>().HasKey(u => u.Id);
modelBuilder.Entity<Session>().Property(p => p.Id).ValueGeneratedOnAdd();
// Configure indexes
modelBuilder.Entity<Session>().HasIndex(u => u.EventId);
// Configure columns
modelBuilder.Entity<Session>().Property(ug => ug.Name).HasColumnType("nvarchar(255)").IsRequired();
modelBuilder.Entity<Session>().Property(ug => ug.Description).HasColumnType("nvarchar(255)").IsRequired();
modelBuilder.Entity<Session>().Property(ug => ug.DateTime).HasColumnType("datetime").IsRequired();
modelBuilder.Entity<Session>().Property(ug => ug.VonageSessionId).HasColumnType("nvarchar(255)").IsRequired();
// Configure relationships
modelBuilder.Entity<Session>().HasMany<UserSessionRole>().WithOne(r => r.Session).HasForeignKey(u => u.SessionId).OnDelete(DeleteBehavior.NoAction);
用户会话角色:
// Map entities to tables
modelBuilder.Entity<UserSessionRole>().ToTable("usersessionroles");
// Configure Primary Keys
modelBuilder.Entity<UserSessionRole>().HasKey(x => new { x.RoleId, x.SessionId, x.UserId });
modelBuilder.Entity<UserSessionRole>().Property(p => p.Id).ValueGeneratedOnAdd();
在这种情况下,我得到重复的 SessionId 和重复的 RoleId,但不是 EventId。
任何人都知道我配置错了什么或者是否有任何我不知道的技巧?
【问题讨论】:
标签: c# sql-server entity-framework-core