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
{ ///
/// 账户ID ///
public int AccountID { get; set; } ///
/// 账户名 ///
public string AccountName { get; set; } ///
/// 密码 ///
public string Password { get; set; } ///
/// 用户信息 ///
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
{ ///
/// 账户ID ///
public int AccountID { get; set; } ///
/// 账户名 ///
public string AccountName { get; set; } ///
/// 密码 ///
public string Password { get; set; } ///
/// 用户信息 ///
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
{ // 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
{ // 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
} public DbSet
{
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
{ ///
/// 分类ID ///
public Guid CategoryID { get; set; } ///
/// 分类名称 ///
public string CategoryName { get; set; } ///
/// 产品 ///
public virtual ICollection
}
}
Product.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Northwind.App.Entities
{ public class Product
{ ///
/// 产品ID ///
public Guid ProductID { get; set; } ///
/// 产品名称 ///
public string ProductName { get; set; } ///
/// 单价 ///
public decimal UnitPrice { get; set; } ///
/// 数量 ///
public Nullable<int> Quantity { get; set; } ///
/// 库存 ///
public Nullable<int> UnitsInStock { get; set; } ///
/// 产品类别ID ///
public Guid CategoryID { get; set; } ///
/// 产品类别 ///
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
{ // 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
{ // 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
} public DbSet
{
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();
}
}
}
}
运行代码后生成的数据表: