EntityFramework之一對一關系(二)


下面新建兩個實體,關系為一對一

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、數據庫關系圖

 

 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM