MVC3中相同类型实体之间的多对多关系

2023-12-14

我有一个 ASP.NET MVC3 应用程序,其中使用 Entity Framework 4.3 Code-First 和迁移。

我一直在尝试在相同类型的实体之间创建多对多关系,但是当我使用迁移搭建迁移支架时,它会生成一对一关系。

这个想法是一个用户应该能够关注多个其他用户(比如 Twitter)。

My User模型看起来像这样:

public class User
{
    public int UserId { get; set; }
    public string Name { get; set; }
    public DateTime Registered { get; set; }
    ...
    public virtual ICollection<User> Follows { get; set; }
}

当我搭建添加的 Follows-property 时,我得到如下迁移:

public partial class FollowUser : DbMigration
{
    public override void Up()
    {
        AddColumn("User", "User_UserId", c => c.Int());
        AddForeignKey("User", "User_UserId", "User", "UserId");
        CreateIndex("User", "User_UserId");
    }

    ...
}

因此,实体框架将我的模型解释为两个用户之间的一对一关系。

如何在相同类型的实体之间创建多对多关系?


由于它是多对多自连接关系,因此用户实体应该有一个Followers and Following两个类型的属性User。所以让我们改变你的课程以包括那些

public class User
{
    public int ID { get; set; }
    public string Name { get; set; }       
    public virtual ICollection<User> Followers { get; set; }
    public virtual ICollection<User> Following { get; set; }
}

现在更新 DbContext 类以具有返回用户的属性

 public DbSet<User> Users { set; get; }

我们需要告诉 EntityFramework 我们需要在这两者之间建立多对多的关系。所以让我们通过覆盖 Fluent API 来做到这一点OnModelCreating method

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<User>().HasMany(m => m.Followers).WithMany(p => p.Following).Map(w => w.ToTable("User_Follow").MapLeftKey("UserId").MapRightKey("FollowerID"));
    base.OnModelCreating(modelBuilder);
}

现在实体框架将创建这样的表。

enter image description here

请注意,我们明确告诉实体框架使用UserId and 关注者ID作为外键列名称。如果我们没有提到这一点,EF 将使用User_ID and User_ID1作为列名称。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVC3中相同类型实体之间的多对多关系 的相关文章

随机推荐

  • Jquery bootstrap select2 插件问题与验证插件

    在我的引导项目中 我尝试使用插件 select2 但我意识到 如果您使用此插件 则无法再使用验证插件验证我表单中的选择字段 我会避免使用商业插件引导验证器 div class container div class row div div
  • 全局/局部环境影响 Haskell 的 Criterion 基准测试结果

    我们正在对我们公司的一些 Haskell 代码进行基准测试 我们刚刚遇到了一个非常奇怪的情况 这是一段代码 它对同一事物进行了两次基准测试 前一个使用一个Criterion env它为所有测试创建一次 后者为每个测试创建 env 这是唯一的
  • java.lang.ClassNotFoundException:org.apache.derby.jdbc.EmbeddedDriver

    我正在使用 Eclipse EE Kepler 并且尝试在我的程序中运行 derby 我添加到我的构建路径derby jar and derbyclient jar我仍然收到以下错误 java lang ClassNotFoundExcep
  • JavaFx TableView 与大数据的问题

    我一直在使用JavaFx的tableview来显示数据库中的大量数据 该表有 150 多列和数百万行 我可以通过分块获取数据并实现分页来处理行 link 但列的数量也是一个令人担忧的领域 绘制数据需要花费大量时间 并且当我更改模型中的值时不
  • Android ListView 样式

    我有一个关于列表视图的问题 我希望有人知道解决方案 因为我整个周末都在努力解决这个问题 我有一个自定义列表视图 其中每一行都有一个自定义 xml item row xml 为行项目设置颜色背景
  • 将动态对象数组传递给函数

    我正在学习c 所以我知道一种方法 您可以通过该方法将某些内容发送到函数 然后就像按值调用一样工作 但实际上它是按引用调用 例如 void myFUNC string x 现在 我有一个动态创建的对象数组 我想传递数组以像上面的方法一样运行
  • @ManyToOne 引用的 getId() 上的 LazyInitializationException

    我面临着LazyInitializationException当我尝试访问分离实体的惰性 ManyToOne 引用的 ID 时 我不想完全获取引用 但只需要 ID 它应该存在于原始对象中 以便以惰性 延迟的方式获取引用 EntityA ea
  • Drools 6.0 在运行时动态加载规则

    我想在运行时加载 drl 文件 我发现的帖子包括这个one适用于 5 0 版本 但我不知道如何为 drools 6 0 版本执行此操作 在 Drools 6 中 您的规则包被部署到 Maven 提供了 KieScanner 您可以将其附加到
  • 为什么我在正则表达式中找不到这个字符串?

    lines total check 0 with pdfplumber open file as pdf pages pdf pages for page in pdf pages text page extract text for li
  • 更改、翻译日期格式

    我的代码中有一个简单的问题 我有一个函数 可以将日期传递为意大利语格式 并且我想将格式更改为英语 我已经尝试过这个 public function changeDateFormat date start old date start old
  • Pandas 根据条件组合连续行

    我的问题与此类似 但答案似乎并不完全有效 根据条件合并行 pandas 数据框 给定以下 pandas 数据框 SECTION TEXT NUMBER OF WORDS ONE lots of text 55 ONE word1 1
  • 使用发布库时,OpenCV imread(filename) 在调试模式下失败

    我有一些C 代码并且一切正常OpenCV除了函数imread file 它正确地找到了文件并加载了名称 但没有加载任何数据 Mat pattImage imread fileName 0 经过在网上的一些研究后 我意识到我处于调试模式 但随
  • Java - 跳过for循环中的值

    我正在尝试使用 for 循环跳过值 就像是 for int i 32 i lt 255 but skip 128 to 159 i char ascii char i System out println ascii 有什么建议么 谢谢 在
  • pandas concat('outer') 不做联合?

    它看起来pandas concat正在执行 左外 连接 而不仅仅是联合索引 对我来说似乎是一个错误 但也许我错过了一些明显的东西 import pandas import pandas util testing as put ts1 put
  • PHP 中的多维数组大小限制

    我正在开发一个函数 最终会向数组添加大量维度 我想知道是否有可能达到可以添加的维度的限制 如果是这样 PHP 中的限制是什么 不 我不认为访问深度有限制 除了你有多少内存 不过 每一层都至少添加一个指针间接 因此随着层数的加深 检索元素的速
  • stdClass 类的对象无法转换为字符串

    我不知道为什么 但我收到此错误 可捕获的致命错误 类 stdClass 的对象无法转换为字符串 对于这段代码 sql SELECT FROM player ORDER BY score DESC LIMIT begin arr array
  • InvalidOperationException - 对象当前正在其他地方使用

    我已经经历过这个问题但这没有帮助 这里的情况有所不同 我正在使用后台工作者 第一个后台工作者开始对用户的图像输入进行操作 并在firstbackgroundworker runworkercompleted 内部进行操作 我正在调用另外3个
  • 如何在区域地图上赋予不透明度

    我遇到了 html 不透明度问题 目前我已经使用 css 应用了不透明度 但它不起作用 我的 html 和 css 代码如下 area class transbox href test1 htm target blank area opac
  • Swift 索引 0 超出表视图中空数组的范围

    我正在尝试使用 PFTableViewCell 连接到主电视控制器的 2 个标签进行解析来填充 tableview 当我添加 TableView 的节数 numberOfRowsInSection 时 应用程序崩溃 但是当我删除它时 它可以
  • MVC3中相同类型实体之间的多对多关系

    我有一个 ASP NET MVC3 应用程序 其中使用 Entity Framework 4 3 Code First 和迁移 我一直在尝试在相同类型的实体之间创建多对多关系 但是当我使用迁移搭建迁移支架时 它会生成一对一关系 这个想法是一