• 【EF Code First】 一对多、多对多的多重关系配置


    这里使用用户表(User)和项目(Project)表做示例

    有这样一个需求:

    用户与项目的关系是:一个用户可以发多个项目,可以参加多个项目,而项目可以有多个参与成员和一个发布者

    [其中含1-n和n-n的关系]

    1-n:一个用户可以发布多个项目

    n-n:一个项目的参与用户可以多个,一个用户可以参与多个项目

    所以在写映射关系的代码时需要注意指定属性之间的关系

    项目结构:

    实体类结构设计如下

    /// <summary>
        /// 用户
        /// </summary>
       public class User
        {       
           public int ID { get;set;}
    
           public string NickName { get; set; }       
           
           public DateTime RegisterTime { get; set; }
    
           /// <summary>
           /// 参与的项目列表
           /// </summary>
           public ICollection<Project> Projects { get; set; }
        }
    

      

    /// <summary>
        /// 项目
        /// </summary>
       public   class Project
        {      
           public int ID { get; set; }
    
           public string Title { get; set; }
    
           public string Description { get; set; }
    
           /// <summary>
           /// 项目发布者
           /// </summary>
           public virtual User Founder { get; set; }
    
           /// <summary>
           /// 参与成员
           /// </summary>
           public virtual ICollection<User> Member { get; set; }
    
        }
    

      

    然后,新建一个映射类 UserMap

     public class UserMap : EntityTypeConfiguration<User>
        {
            public UserMap() { //定义用户与项目之间的多对多关系
                this.HasMany<Project>(u => u.Projects).WithMany(p=>p.Member);
            }
        }
    

    EF里的实体关系配置分为Has和With系列的方法:Optional 可选的、Required 必须的、Many 多个

    EF上下文中

    public  class DB:DbContext
        {
           public DB() : base("DefaultConnection") { }
    
           public DbSet<User> User { get; set; }
           public DbSet<Project> Project { get; set; }
    
           protected override void OnModelCreating(DbModelBuilder modelBuilder)
           {
               modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();//移除复数表名的契约
    
              // base.OnModelCreating(modelBuilder);
               modelBuilder.Configurations.Add(new UserMap());
           }
        }
    

      

     class Program
        {
            static void Main(string[] args)
            {
                DB db = new DB();            
                db.User.ToList();
                Console.ReadKey();
            }
        }
    

    运行后,表结构

    下一节:【EF Code First】 一对一、一对多的多重关系配置

  • 相关阅读:
    我对NHibernate的感受(3):有些尴尬的集合支持
    NHibernate3.0剖析:Query篇之NHibernate.Linq标准查询
    NHibernate3.0剖析:Query篇之NHibernate.Linq增强查询
    30个优秀的后台管理界面设计案例分享
    NHibernate Session Flush的作用
    NHibernate 3 Extending the Linq Provider to fix some System.NotSupportedException
    Activity初步
    公司间交易学习笔记概述
    公司间交易学习笔记值映射
    BOM配置
  • 原文地址:https://www.cnblogs.com/Sunlimi/p/4347459.html
Copyright © 2020-2023  润新知