• 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、数据库关系图

  • 相关阅读:
    【POJ
    【OpenJ_Bailian
    【Aizu
    【OpenJ_Bailian
    leetcode-746-Min Cost Climbing Stairs(动态规划)
    leetcode-744-Find Smallest Letter Greater Than Target(改进的二分查找)
    leetcode-728-Self Dividing Numbers
    leetcode-717-1-bit and 2-bit Characters
    leetcode-697-Degree of an Array
    leetcode-682-Baseball Game
  • 原文地址:https://www.cnblogs.com/zuqing/p/5452315.html
Copyright © 2020-2023  润新知