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(); } } } }
复制代码

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值