EF6 代码首先从数据库添加关系生成
EF 6 Code First Generated From Database adding Releationship
我有一个使用了 nuget 功能的现有数据库 'Code First From Database'
在大多数情况下,它似乎工作得很好。但是,它没有提取数据库具有的所有关键关系。
我有一个名为 Sessions 的 table 和一个名为 Responses 的 table。 Responses table 有一个 SessionId 字段。现在,在旧的 EDMX 模型文件中,会话和响应之间存在 1:* 关系。这样我就可以 foundSession.Responses
获取该会话的响应列表。
数据库中的代码优先未创建 Session.Responses 关系。我在会话模型中添加了一个 ICollection。我怀疑我还需要在 'OnModelCreating' 方法中添加这种关系的设置方式。
我尝试做类似的事情:
modelBuilder.Entity<Session>()
.HasMany(e => e.Responses)
.WithMany().Map(m => m.ToTable("Sessions").MapLeftKey("Id").MapRightKey("SessionId"));
但这没有用。它给了我一个错误:"Invalid object name '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:many。可能吗?
我不是 100% 确定如何使用 Fluent API,但您可以使用数据注释以这种方式完成:
在你的 Session
class:
public virtual ICollection<Response> Responses { get; set; }
在你的 Response
class:
[ForeignKey("MySession")]
public int SessionID { get; set; }
public virtual Session MySession { get; set; }
这是一种使用 Fluent 创建一对多关系的方法 Api:
modelBuilder.Entity<Response>().
HasRequired(e => e.Session).
WithMany(s=>s.Responses).
HasForeignKey(m => m.SessionId);
我有一个使用了 nuget 功能的现有数据库 'Code First From Database'
在大多数情况下,它似乎工作得很好。但是,它没有提取数据库具有的所有关键关系。
我有一个名为 Sessions 的 table 和一个名为 Responses 的 table。 Responses table 有一个 SessionId 字段。现在,在旧的 EDMX 模型文件中,会话和响应之间存在 1:* 关系。这样我就可以 foundSession.Responses
获取该会话的响应列表。
数据库中的代码优先未创建 Session.Responses 关系。我在会话模型中添加了一个 ICollection。我怀疑我还需要在 'OnModelCreating' 方法中添加这种关系的设置方式。
我尝试做类似的事情:
modelBuilder.Entity<Session>()
.HasMany(e => e.Responses)
.WithMany().Map(m => m.ToTable("Sessions").MapLeftKey("Id").MapRightKey("SessionId"));
但这没有用。它给了我一个错误:"Invalid object name '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:many。可能吗?
我不是 100% 确定如何使用 Fluent API,但您可以使用数据注释以这种方式完成:
在你的 Session
class:
public virtual ICollection<Response> Responses { get; set; }
在你的 Response
class:
[ForeignKey("MySession")]
public int SessionID { get; set; }
public virtual Session MySession { get; set; }
这是一种使用 Fluent 创建一对多关系的方法 Api:
modelBuilder.Entity<Response>().
HasRequired(e => e.Session).
WithMany(s=>s.Responses).
HasForeignKey(m => m.SessionId);