【发布时间】:2011-05-12 19:22:50
【问题描述】:
我正在使用 EF Code First,需要一些帮助。
一个用户可以创建多个帖子。
一个用户可以推荐很多帖子
一个帖子可以有许多用户推荐。
鉴于此代码:
public class User
{
public int UserID { get; set; }
public string Name { get; set; }
public virtual ICollection<Post> Posts { get; set; }
public virtual ICollection<Post> Recommendations { get; set; }
}
public class Post
{
public int PostID { get; set; }
public int UserID { get; set; }
public virtual User User { get; set; }
public virtual ICollection<User> RecommendingUsers { get; set; }
}
modelBuilder.Entity<Post>()
.HasMany(x => x.RecommendingUsers)
.WithMany(x => x.Recommendations)
.Map(x => x.MapLeftKey("PostID")
.MapRightKey("UserID")
.ToTable("Recommendations"));
我最终在 Post 表中得到了一个额外的“User_UserID”列,它用于外键:
PostID(PK,int,非空)
用户 ID(int,非空)
User_UserID(FK, int, null)
为什么不使用 UserID 作为外键?
【问题讨论】:
-
你确定。我刚刚使用了你的代码,它按预期工作。
-
我什至尝试过手动删除数据库并让 EF 重新创建它。我仍然以那个 User_UserID 列结束。那么,您的文件中只有 PostID 和 UserID 列?
-
是的。我只是将所有 ID 重命名为 Id。它奏效了。
-
有没有办法在不修改实际数据库的情况下做到这一点?
-
在尝试修复此类问题之间终止网络服务器/Cassini 非常重要,否则缓存的数据库信息似乎有时会在您尝试使事情正常运行时给您带来误报。
标签: mapping many-to-many ef-code-first entity-framework-4.1