0%

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 { 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 { 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());
} public DbSet Accounts { get; set; } public DbSet 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
{ ///


/// 分类ID ///

public Guid CategoryID { get; set; } ///
/// 分类名称 ///

public string CategoryName { get; set; } ///
/// 产品 ///

public virtual ICollection Products { get; set; }
}
}

复制代码

  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 { 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 { 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());
} public DbSet Accounts { get; set; } public DbSet Users { get; set; } public DbSet Categories { get; set; } public DbSet 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();
        }
    }
}

}

复制代码

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