您的位置:首页 > 其它

EntityFramework之一对一关系(二)

2016-05-02 14:24 323 查看
下面新建两个实体,关系为一对一

Product为产品类,WarrantyCard为保修卡类,一个产品对应一个保修卡,一个保修卡对应一个产品。

1、新建实体类

public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }

public virtual WarrantyCard WarrantyCard { get; set; }
}

public class WarrantyCard
{
public int ProductId { get; set; }
public DateTime ExpiredDate { get; set; }

public virtual Product Product { get; set; }
}


2、创建EntityContext类并继承DbContext

public class EntityContext : DbContext
{
public EntityContext()
: base("name=DBConnectionString")
{

}

public DbSet<Product> Product { get; set; }
public DbSet<WarrantyCard> WarrantyCard { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.AddFromAssembly(Assembly.GetExecutingAssembly());
base.OnModelCreating(modelBuilder);
}


3、在web.config文件中添加数据库连接字符串

<connectionStrings>
<add name="DBConnectionString" connectionString="Data Source=.;Initial Catalog=OneToOne;Integrated Security=true" providerName="System.Data.SqlClient" />
</connectionStrings>


4、创建表映射类

public class ProductMap : EntityTypeConfiguration<Product>
{
public ProductMap()
{
ToTable("Product");
HasKey(p => p.Id);

//两条语句效果一样
HasOptional(p => p.WarrantyCard).WithRequired(p => p.Product);
//HasRequired(p => p.WarrantyCard).WithRequiredPrincipal(i => i.Product);
}
}

public class WarrantyCardMap : EntityTypeConfiguration<WarrantyCard>
{
public WarrantyCardMap()
{
ToTable("WarrantyCard");
HasKey(w => w.ProductId);
}
}


HasOptional(p => p.WarrantyCard).WithRequired(p => p.Product)这句大概意思是:在新增数据到Product表时可以不加数据到WarrantyCard表,也可以加,

但是往WarrantyCard表新增数据时必须有Product表中的ProductId,WarrantyCard依赖Product,生成的是关系是Product表Id是主键,WarrantyCard表ProductId是外键。

5、写点代码测试一下

EntityContext db = new EntityContext();
var product = new Product() { Description = "电器", Name = "电磁炉" };
db.Set<Product>().Add(product);
db.SaveChanges();

var card = new WarrantyCard() { ExpiredDate = DateTime.Now, ProductId = product.Id };
db.Set<WarrantyCard>().Add(card);
db.SaveChanges();

//WarrantyCard为Product类中的WarrantyCard属性名
var list = db.Set<Product>().Include("WarrantyCard").ToList();


6、数据库关系图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: