下面新建兩個實體,關系為一對一
Product為產品類,WarrantyCard為保修卡類,一個產品對應一個保修卡,一個保修卡對應一個產品。
1、新建實體類
1 public class Product 2 { 3 public int Id { get; set; } 4 public string Name { get; set; } 5 public string Description { get; set; } 6 7 public virtual WarrantyCard WarrantyCard { get; set; } 8 } 9 10 public class WarrantyCard 11 { 12 public int ProductId { get; set; } 13 public DateTime ExpiredDate { get; set; } 14 15 public virtual Product Product { get; set; } 16 }
2、創建EntityContext類並繼承DbContext
1 public class EntityContext : DbContext 2 { 3 public EntityContext() 4 : base("name=DBConnectionString") 5 { 6 7 } 8 9 public DbSet<Product> Product { get; set; } 10 public DbSet<WarrantyCard> WarrantyCard { get; set; } 11 12 protected override void OnModelCreating(DbModelBuilder modelBuilder) 13 { 14 modelBuilder.Configurations.AddFromAssembly(Assembly.GetExecutingAssembly()); 15 base.OnModelCreating(modelBuilder); 16 }
3、在web.config文件中添加數據庫連接字符串
1 <connectionStrings> 2 <add name="DBConnectionString" connectionString="Data Source=.;Initial Catalog=OneToOne;Integrated Security=true" providerName="System.Data.SqlClient" /> 3 </connectionStrings>
4、創建表映射類
1 public class ProductMap : EntityTypeConfiguration<Product> 2 { 3 public ProductMap() 4 { 5 ToTable("Product"); 6 HasKey(p => p.Id); 7 8 //兩條語句效果一樣 9 HasOptional(p => p.WarrantyCard).WithRequired(p => p.Product); 10 //HasRequired(p => p.WarrantyCard).WithRequiredPrincipal(i => i.Product); 11 } 12 } 13 14 public class WarrantyCardMap : EntityTypeConfiguration<WarrantyCard> 15 { 16 public WarrantyCardMap() 17 { 18 ToTable("WarrantyCard"); 19 HasKey(w => w.ProductId); 20 } 21 }
HasOptional(p => p.WarrantyCard).WithRequired(p => p.Product)這句大概意思是:在新增數據到Product表時可以不加數據到WarrantyCard表,也可以加,
但是往WarrantyCard表新增數據時必須有Product表中的ProductId,WarrantyCard依賴Product,生成的是關系是Product表Id是主鍵,WarrantyCard表ProductId是外鍵。
5、寫點代碼測試一下
1 EntityContext db = new EntityContext(); 2 var product = new Product() { Description = "電器", Name = "電磁爐" }; 3 db.Set<Product>().Add(product); 4 db.SaveChanges(); 5 6 var card = new WarrantyCard() { ExpiredDate = DateTime.Now, ProductId = product.Id }; 7 db.Set<WarrantyCard>().Add(card); 8 db.SaveChanges(); 9 10 //WarrantyCard為Product類中的WarrantyCard屬性名 11 var list = db.Set<Product>().Include("WarrantyCard").ToList();
6、數據庫關系圖