zoukankan      html  css  js  c++  java
  • 【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】 一对一、一对多的多重关系配置

  • 相关阅读:
    SCILAB简介[z]
    UG OPEN API编程基础 2约定及编程初步
    Office 2003与Office 2010不能共存的解决方案
    UG OPEN API 编程基础 3用户界面接口
    NewtonRaphson method
    UG OPEN API编程基础 13MenuScript应用
    UG OPEN API编程基础 14API、UIStyler及MenuScript联合开发
    UG OPEN API编程基础 4部件文件的相关操作
    UG OPEN API编程基础 1概述
    16 UG Open的MFC应用
  • 原文地址:https://www.cnblogs.com/Sunlimi/p/4347459.html
Copyright © 2011-2022 走看看