集合的 EF Code First 映射

2024-03-13

我首先使用 EF 4.1 RC 代码。我在连接表 Friends 中有一个使用复合 PK 的多对多关系。我们明确需要一个单独的 Friends 类(不要问)来代表我们的联结表。我们的目标是能够控制用户实体的删除过程。请在阅读其余部分之前先阅读此内容:http://mocella.blogspot.com/2010/01/entity-framework-v4-object-graph.html http://mocella.blogspot.com/2010/01/entity-framework-v4-object-graph.html。因此,我们设法创建了复合 PK,但这破坏了我们的集合映射。问题是如何映射FriendsCol?

public class User
{
    public int UserId { get; set; }
    public string Name { get; set; }
    public virtual ICollecion<Friends> FriendsCol { get; set; }

}

public class Friends
{
    public int User1Id { get; set; }
    public int User2Id { get; set; }

    public User User1 { get; set; }
    public User User2 { get; set; }

}

具有复合键映射

public class FriendsMap : EntityTypeConfiguration<Friends>
{
  HasKey(m => new { m.userId1 , m.userId2 });

  //this.HasRequired(x => x.User1)
  //.WithMany()
  //.HasForeignKey(x => x.User1Id)
  //.WillCascadeOnDelete(false);

  //this.HasRequired(x => x.User2)
  //    .WithMany()
  //    .HasForeignKey(x => x.User2Id)
  //    .WillCascadeOnDelete(false);
}

public class UserMap : EntityTypeConfiguration<UserNew>
{
  public UserMap()            
  {
    ToTable("users");
    Property(user => user.Name).HasColumnName("name");
    // HasMany<Friends>(user => user.FriendsCol).WithMany();

  }
}

那这个呢:

public class FriendsMap : EntityTypeConfiguration<Friends>
{
  HasKey(m => new { m.userId1 , m.userId2 });

  this.HasRequired(x => x.User1)
      .WithMany()
      .HasForeignKey(x => x.User1Id)
      .WillCascadeOnDelete(false);

  this.HasRequired(x => x.User2)
      .WithMany(u => u.FriendsCol)
      .HasForeignKey(x => x.User2Id)
      .WillCascadeOnDelete(false);
}

public class UserMap : EntityTypeConfiguration<UserNew>
{
  public UserMap()            
  {
    ToTable("users");
    Property(user => user.Name).HasColumnName("name");
  }
}

Edit:

我只是做了一个非常简单的例子,它的工作没有任何问题:

class Program
{
    static void Main(string[] args)
    {
         using (var context = new Context())
         {
             context.Database.Delete();
             context.Database.CreateIfNotExists();

             var u1 = new User() { Name = "A" };
             var u2 = new User() { Name = "B" };
             var u3 = new User() { Name = "C" };

             var f1 = new Friends() { User1 = u1, User2 = u2};
             var f2 = new Friends() { User1 = u1, User2 = u3 };

             context.Friends.Add(f1);
             context.Friends.Add(f2);
             context.SaveChanges();
         }
    }
}

public class User
{
    public int UserId { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Friends> FriendsCol { get; set; }
}

public class Friends
{
    public int User1Id { get; set; }
    public int User2Id { get; set; }

    public User User1 { get; set; }
    public User User2 { get; set; }

}

public class Context : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Friends> Friends { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<Friends>()
            .HasKey(m => new { m.User1Id, m.User2Id });

        modelBuilder.Entity<Friends>()
            .HasRequired(x => x.User1)
            .WithMany()
            .HasForeignKey(x => x.User1Id)
            .WillCascadeOnDelete(false);

        modelBuilder.Entity<Friends>()
            .HasRequired(x => x.User2)
            .WithMany(u => u.FriendsCol)
            .HasForeignKey(x => x.User2Id)
            .WillCascadeOnDelete(false);

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

集合的 EF Code First 映射 的相关文章

随机推荐

  • 使用 Linq + Include 排序

    我与两个实体有一对多关系 Order int OrderId string OrderNumber OrderItem int ItemId int sequence Product int ProductId string Product
  • 使用带有 SL 和 TP 的 CCXT 使用 Python 在 FTX 上创建市场订单

    有人有如何创建带有止盈和止损的市价订单的示例吗 我已经阅读了文档 因为这是我第一次做这样的事情 所以我真的不明白 我正在尝试创建一个 API 端点 该端点接收来自 TradingView 的警报并下订单 我真的不想使用限价订单 因为我只想以
  • Oracle - 带有可选参数的索引使用

    我使用以下技巧来索引具有一些空值的列 create index xx people idx1 on xx people id number 1 这很好用 遗憾的是 当您使用可选参数时 这并没有帮助 select from xx people
  • Autofixture构造函数注入延迟加载

    我在单元测试中使用自动装置 它作为自动模拟器的工作方式非常棒 但是 当我将延迟加载的对象注入到我的类中时 我遇到了问题 例如 public class MyClass IMyClass private Lazy
  • Facebook“点赞”会产生“更新页面时出现内部错误”。

    几个月前 我在我的博客中添加了一个 赞 按钮 一切运行良好 今天早上我突然添加了一篇新帖子 不知出于什么原因 点赞按钮现在坏了 每次我点击 喜欢 时 我都会收到此错误 There was an internal error when upd
  • openXmlSdk 在运行元素内插入新行

    我里面有文字Run元素 我正在尝试更换 r在字符串中带有line break 正文如下 This is an example project for testing purposes rThis is all sample data non
  • Kibana 无法在 Windows 上连接到 elasticsearch

    我正在运行 Elastic Search 7 6 它工作正常http 本地主机 9200 http localhost 9200 我能够使用 REST API 将值添加到索引 现在 当我启动 kibana 7 6 时 出现以下错误 log
  • Apache 和 MySQL 是多线程应用程序吗?

    我想知道是否默认安装Apache and MySQL on 视窗 Linux是否是多线程的 这取决于如何看待它 MySQL允许您同时运行多个线程 这可用CPU RAM资源 但它不允许您使用多个线程运行单个查询 Apache是多线程的 这是
  • Azure Artifacts - 与其他项目共享项目范围的源

    我们的组织内有许多项目 其中一个项目创建了一个项目范围的 Azure Artifact 源 他们希望与我们的其他项目共享 但是 当其他项目访问其工件页面时 从提要下拉列表中 他们只能看到 组织范围的提要 而 项目范围的提要 下没有任何内容
  • LoadError: 无法加载此类文件 -- 英语

    我们的代码确实 require english 它在本地工作 但我们在 CI 服务器上收到此错误 LoadError 无法加载此类文件 英语 有任何想法吗 事实证明解决办法是改变 require english into require E
  • 如何使 jquery click 事件仅在第一次单击时触发

    我有两个 div basic1 和 basic2 我希望 basic1 在单击时淡出 而 basic2 在我工作得很好的情况下淡出 唯一的问题是 一旦 basic2 淡入 如果用户继续单击链接 navbar1 它将一遍又一遍地淡入该 div
  • 在图像视图的触摸事件上填充两个图像叠加,如搜索栏

    有两个图像黑色和蓝色 同时触摸蓝色图像 它应该像进度一样填充 我在不使用画布的情况下使用多个剪切图像实现了但没有得到smoothness触摸时 例如 实际上 我正在尝试实现类似于我上面提到的 100 个俯卧撑应用程序 我得到了一个link
  • 在递归函数中使用 .Find

    我正在尝试使用以下命令查找工作表中的行号 Find递归函数中的函数 我设置了一个名为Found Find 它效果很好 一点点 我在递归深度为 1 级时设置它 然后在递归深度为 2 级时再次设置它 然后 我的代码找到路径的末尾并开始备份 直到
  • 覆盖 ActiveRecord 对模型和集合的查找的最简洁方法是什么?

    我有重写 Ar 的 find 方法的库代码 我还包括所有 Association 类的模块 因此 MyModel find 和 parent my models find 都可以工作并应用正确的范围 我的代码基于 will paginate
  • MemoryError:无法分配具有形状和数据类型对象的数组

    我想在两个数据集之间执行内部联接 如下所示 theme ids head id Loan Theme ID Loan Theme Type Partner ID 0 638631 a1050000000skGl General 151 1
  • 写入 Amazon DynamoDB(PHP API)的速度慢得离谱

    这个问题已经发布在AWS论坛上 但仍未得到解答https forums aws amazon com thread jspa threadID 94589 https forums aws amazon com thread jspa th
  • 静态分配的内存在静态取消初始化期间会变得无效吗?

    假设我定义了一个像这样的变量 C static const char str Here is some string data 我有一个静态分配的类实例 它在其析构函数中引用该数组 这会出错吗 例如 可以吗str变量不知何故变得无效 cla
  • Weakreference get() 方法安全吗? (安卓,异步任务)

    我正在制作一个 Android 移动应用程序 我在 AsyncTask 中有一个对我的 Activity 的 WeakReference 以确保它可以被垃圾收集 When onPostExecute 接到电话 我愿意 Acitivty ac
  • id 的值相同(浮点数)

    据我所知 Python 中的一切都是对象id 应该 我对吗 为每个对象返回不同的数字 就我而言 id 1 回报4298178968 id 2 回报4298178944但我对所有浮点类型都得到相同的值 id 1 1 回报4298189032
  • 集合的 EF Code First 映射

    我首先使用 EF 4 1 RC 代码 我在连接表 Friends 中有一个使用复合 PK 的多对多关系 我们明确需要一个单独的 Friends 类 不要问 来代表我们的联结表 我们的目标是能够控制用户实体的删除过程 请在阅读其余部分之前先阅