首先从数据库生成的EF 6代码添加Releationship

时间:2015-01-15 19:11:21

标签: c# database entity-framework ef-code-first ef-migrations

我有一个现有的数据库,我使用了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:很多。有可能吗?

2 个答案:

答案 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);