我有一个现有的数据库,我使用了nuget功能'Code First From Database'
在大多数情况下,它似乎运作良好。但是,它没有掌握数据库的所有关键关系。
我有一个名为Sessions的表和一个名为Responses的表。 Responses表有一个SessionId字段。现在在旧的EDMX模型文件中,我在Sessions和Responses之间有一个1:*的关系。通过这种方式,我可以foundSession.Responses
获取该会话的响应列表。
Code First From Database没有创建Session.Responses关系。我在会话模型中添加了一个ICollection。我怀疑我还需要添加如何在'OnModelCreating'方法中设置关系。
我尝试过这样的事情:
modelBuilder.Entity<Session>()
.HasMany(e => e.Responses)
.WithMany().Map(m => m.ToTable("Sessions").MapLeftKey("Id").MapRightKey("SessionId"));
但那没用。它给了我一个错误:“无效的对象名称'dbo.Sessions1'。”
我试图用同样的方法将其基于另一条线:
modelBuilder.Entity<Role>()
.HasMany(e => e.Users)
.WithMany(e => e.Roles)
.Map(m => m.ToTable("RoleUser").MapLeftKey("Roles_Id").MapRightKey("Users_Id"));
但这是一对多关系。我似乎没有看到任何1:很多。有可能吗?
答案 0 :(得分:1)
我不是100%确定如何使用Fluent API执行此操作,但您可以使用数据注释以这种方式执行此操作:
在Session
课程中:
public virtual ICollection<Response> Responses { get; set; }
在Response
课程中:
[ForeignKey("MySession")]
public int SessionID { get; set; }
public virtual Session MySession { get; set; }
答案 1 :(得分:0)
这是一种使用Fluent Api创建一对多关系的方法:
modelBuilder.Entity<Response>().
HasRequired(e => e.Session).
WithMany(s=>s.Responses).
HasForeignKey(m => m.SessionId);