zoukankan      html  css  js  c++  java
  • Code First 重复外键

    原因:在一个表中,我有如下字段

    表名:orderInfo

    列名:companySend,companyReceiver


    先展示表结构,(手打了,见谅)

    public class OrderInfo
        {
            public int id{ get; set; }
            public string Name { get; set; }
            public Nullable<int> companyId1{ get; set; }
            public Nullable<int> companyId2{ get; set; }
    
            [ForeignKey("companyId1")]
            public CompanyInfo company1{ get; set; }
    
            [ForeignKey("companyId2")]
            public CompanyInfo company2{ get; set; }
    
        }
    
    public class CompanyInfo
    {
    public int id{ get; set; }
            public string Name { get; set; }
            
            public List<OrderInfo> order1 { get; set; }
            public List<OrderInfo> order2 { get; set; }
    }

    这里我们看见,对于order,我存在了两个关联company的字段。

    如果进入codefirst,那么实际会出现问题。

    大致是,对于companyid会出现4个字段,companyid1,companyid2,companyInfoid1,companyInfoid2


    怎么解决这个问题呢?

    我们先明白,出现这个问题,主要是order虽然申明了foreignkey和字段名称。但是系统不知道应该对应 order1还是order 2


    解决这个问题,我们只需要这个:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                //增加映射关系
                modelBuilder.Entity<Order>()
     .HasRequired(a => a.company1)
     .WithMany(u2 => u2.order1)
     .HasForeignKey(a => a.companyId1)
     .WillCascadeOnDelete(false);
                modelBuilder.Entity<Order>()
                 .HasRequired(a => a.company2)
                 .WithMany(u2 => u2.order2)
                 .HasForeignKey(a => a.companyId2)
                 .WillCascadeOnDelete(false);
            }



  • 相关阅读:
    C#代码
    属性面板:tabcontroller
    窗体效果
    c#窗体开发
    帝国cms学习
    在树莓派上运行 .net core 2.1 程序 并实现开机启动
    C# 高性能的数组 高性能数组队列实战 HslCommunication的SharpList类详解
    C# 序列化详解,xml序列化,json序列化对比
    C# 读写redis C#读写实时数据库
    python 读写三菱PLC数据,使用以太网读写Q系列,L系列,Fx系列的PLC数据
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/9779906.html
Copyright © 2011-2022 走看看