zoukankan      html  css  js  c++  java
  • EF Code First一对一、一对多、多对多关联关系配置

    1、EF Code First一对一关联关系

       项目结构图:

      实体类:

      Account.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Northwind.App.Entities
    {
       public class Account
        {
           /// <summary>
           /// 账户ID
           /// </summary>
           public int AccountID { get; set; }
    
           /// <summary>
           /// 账户名
           /// </summary>
           public string AccountName { get; set; }
    
           /// <summary>
           /// 密码
           /// </summary>
           public string Password { get; set; }
    
           /// <summary>
           /// 用户信息
           /// </summary>
           public virtual User User { get; set; }
        }
    }

      User.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Northwind.App.Entities
    {
       public class Account
        {
           /// <summary>
           /// 账户ID
           /// </summary>
           public int AccountID { get; set; }
    
           /// <summary>
           /// 账户名
           /// </summary>
           public string AccountName { get; set; }
    
           /// <summary>
           /// 密码
           /// </summary>
           public string Password { get; set; }
    
           /// <summary>
           /// 用户信息
           /// </summary>
           public virtual User User { get; set; }
        }
    }

      实体映射类:

      AccountMap.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using System.Data.Entity.ModelConfiguration;
    using System.ComponentModel.DataAnnotations.Schema;
    
    using Northwind.App.Entities;
    
    namespace Northwind.App.Mapping
    {
        public class AccountMap : EntityTypeConfiguration<Account>
        {
            public AccountMap()
            {
                // Primary Key
                this.HasKey(t => t.AccountID);
    
                // Properties
                this.Property(t => t.AccountName).HasMaxLength(50);
                this.Property(t => t.Password).HasMaxLength(100);
    
                // Table & Column Mappings
                this.ToTable("Account");
                this.Property(t => t.AccountID).HasColumnName("AccountID");
                this.Property(t => t.AccountName).HasColumnName("AccountName");
                this.Property(t => t.Password).HasColumnName("Password");
            }
        }
    }

      UserMap.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using System.Data.Entity.ModelConfiguration;
    using System.ComponentModel.DataAnnotations.Schema;
    
    using Northwind.App.Entities;
    
    namespace Northwind.App.Mapping
    {
        public class UserMap : EntityTypeConfiguration<User>
        {
            public UserMap()
            {
                // Primary Key
                this.HasKey(t => t.AccountID);
    
                // Properties
                this.Property(t => t.AccountID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
                this.Property(t => t.UserName).HasMaxLength(50);
                this.Property(t => t.Email).HasMaxLength(100);
    
                // Table & Column Mappings
                this.ToTable("User");
                this.Property(t => t.AccountID).HasColumnName("AccountID");
                this.Property(t => t.UserName).HasColumnName("UserName");
                this.Property(t => t.Email).HasColumnName("Email");
                this.Property(t => t.RegisterDate).HasColumnName("RegisterDate");
    
                // Relationships
                this.HasRequired(t => t.Account)
                    .WithRequiredDependent(t => t.User);
            }
        }
    }

      NorthwindContext.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using System.Data.Entity;
    
    using Northwind.App.Entities;
    using Northwind.App.Mapping;
    
    namespace Northwind.App
    {
        public class NorthwindContext : DbContext
        {
            static NorthwindContext()
            {
                Database.SetInitializer(new DropCreateDatabaseIfModelChanges<NorthwindContext>());
            }
    
            public DbSet<Account> Accounts { get; set; }
            public DbSet<User> Users { get; set; }
    
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                modelBuilder.Configurations.Add(new AccountMap());
                modelBuilder.Configurations.Add(new UserMap());
            }
        }
    }

      Program.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using Northwind.App.Entities;
    
    namespace Northwind.App
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (NorthwindContext db = new NorthwindContext())
                {
                    Account account = new Account { AccountName = "Test", Password = "1" };
                    db.Accounts.Add(account);
    
                    User user = new User { AccountID = account.AccountID, UserName = "测试", Email = "test@126.com", RegisterDate = DateTime.Now };
                    db.Users.Add(user);
    
                    db.SaveChanges();
                }
            }
        }
    }

      代码运行后生成的数据库结构图:

    2、EF Code First一对多关联关系

      关联表:Product 产品表、Category分类表

      关联关系:一个产品属于一个分类,一个分类可以有多个产品

      实体代码:

      Category.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Northwind.App.Entities
    {
        public class Category
        {
            /// <summary>
            /// 分类ID
            /// </summary>
            public Guid CategoryID { get; set; }
    
            /// <summary>
            /// 分类名称
            /// </summary>
            public string CategoryName { get; set; }
    
            /// <summary>
            /// 产品
            /// </summary>
            public virtual ICollection<Product> Products { get; set; }
        }
    }

      Product.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Northwind.App.Entities
    {
        public class Product
        {
            /// <summary>
            /// 产品ID
            /// </summary>
            public Guid ProductID { get; set; }
    
            /// <summary>
            /// 产品名称
            /// </summary>
            public string ProductName { get; set; }
    
            /// <summary>
            /// 单价
            /// </summary>
            public decimal UnitPrice { get; set; }
    
            /// <summary>
            /// 数量
            /// </summary>
            public Nullable<int> Quantity { get; set; }
    
            /// <summary>
            /// 库存
            /// </summary>
            public Nullable<int> UnitsInStock { get; set; }
    
            /// <summary>
            /// 产品类别ID
            /// </summary>
            public Guid CategoryID { get; set; }
    
            /// <summary>
            /// 产品类别
            /// </summary>
            public virtual Category Category { get; set; }
        }
    }

      实体映射类:

      CategoryMap.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using System.Data.Entity.ModelConfiguration;
    using System.ComponentModel.DataAnnotations.Schema;
    
    using Northwind.App.Entities;
    
    namespace Northwind.App.Mapping
    {
        public class CategoryMap : EntityTypeConfiguration<Category>
        {
            public CategoryMap()
            {
                // Primary Key
                this.HasKey(t => t.CategoryID);
    
                // Properties
                this.Property(t => t.CategoryID)
                    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
                this.Property(t => t.CategoryName).IsRequired()
                    .HasMaxLength(100);
    
                // Table & Column Mappings
                this.ToTable("Category");
                this.Property(t => t.CategoryID).HasColumnName("CategoryID");
                this.Property(t => t.CategoryName).HasColumnName("CategoryName");
            }
        }
    }

      ProductMap.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using System.Data.Entity.ModelConfiguration;
    using System.ComponentModel.DataAnnotations.Schema;
    
    using Northwind.App.Entities;
    
    namespace Northwind.App.Mapping
    {
        public class ProductMap : EntityTypeConfiguration<Product>
        {
            public ProductMap()
            {
                // Primary Key
                this.HasKey(t => t.ProductID);
    
                // Properties
                this.Property(t => t.ProductID)
                    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
                this.Property(t => t.ProductName).IsRequired()
                    .HasMaxLength(100);
                this.Property(t => t.UnitPrice).HasPrecision(10, 2);
    
                // Table & Column Mappings
                this.ToTable("Product");
                this.Property(t => t.ProductID).HasColumnName("ProductID");
                this.Property(t => t.ProductName).HasColumnName("ProductName");
                this.Property(t => t.UnitPrice).HasColumnName("UnitPrice");
                this.Property(t => t.Quantity).HasColumnName("Quantity");
                this.Property(t => t.UnitsInStock).HasColumnName("UnitsInStock");
                this.Property(t => t.CategoryID).HasColumnName("CategoryID");
    
                // Relationships
                this.HasRequired(t => t.Category)
                    .WithMany(t => t.Products)
                    .HasForeignKey(t => t.CategoryID)
                    .WillCascadeOnDelete(false);
            }
        }
    }

      NorthwindContext.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using System.Data.Entity;
    
    using Northwind.App.Entities;
    using Northwind.App.Mapping;
    
    namespace Northwind.App
    {
        public class NorthwindContext : DbContext
        {
            static NorthwindContext()
            {
                Database.SetInitializer(new DropCreateDatabaseIfModelChanges<NorthwindContext>());
            }
    
            public DbSet<Account> Accounts { get; set; }
            public DbSet<User> Users { get; set; }
            public DbSet<Category> Categories { get; set; }
            public DbSet<Product> Products { get; set; }
    
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                modelBuilder.Configurations.Add(new AccountMap());
                modelBuilder.Configurations.Add(new UserMap());
                modelBuilder.Configurations.Add(new CategoryMap());
                modelBuilder.Configurations.Add(new ProductMap());
            }
        }
    }

      Program.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using Northwind.App.Entities;
    
    namespace Northwind.App
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (NorthwindContext db = new NorthwindContext())
                {
                    Category category = new Category { CategoryName = "手机数码" };
                    db.Categories.Add(category);
    
                    Product product = new Product { CategoryID = category.CategoryID, ProductName = "IPhone5", UnitPrice = 5000m, Quantity = 100, UnitsInStock = 60 };
                    db.Products.Add(product);
    
                    db.SaveChanges();
                }
            }
        }
    }

      运行代码后生成的数据表:

  • 相关阅读:
    从字符串中找到中文
    Extjs前端细节处理
    《高效能人士的7个习惯》读后摘记
    千分位设置
    Java语言程序设计 上机实验2 掌握Java的基本语言成分和流程控制语句。 掌握Java中数组的使用,理解引用数据类型。 掌握String类的使用。
    java报告(一)编程打印一个三角形的乘法口诀表
    计算机组成原理 课程设计报告
    汇编语言作业(七)
    汇编语言作业(六)
    汇编语言作业(五)
  • 原文地址:https://www.cnblogs.com/libingql/p/2888201.html
Copyright © 2011-2022 走看看