实体框架-ORM

实体框架是一个对象/关系映射框架。它将代码中的域对象映射到关系数据库中的实体。在大多数情况下,您不必担心数据库层,因为Entity Framework会为您处理它。您的代码操纵对象,并且更改将持久保存到数据库。

创建域模型

下载完成的项目

添加模型

有三种方法可以实现实体框架:

数据库优先:从数据库开始,实体框架生成代码。

模型优先:从可视化模型开始,实体框架生成数据库和代码。

代码优先:从代码开始,实体框架生成数据库。

我们使用的是代码优先方法,因此我们首先将域对象定义为POCO(普通旧CLR对象)。使用代码优先方法,域对象不需要任何额外的代码来支持数据库层,例如事务或持久性。(具体来说,它们不需要从EntityObject类继承。)您仍然可以使用数据注释来控制Entity Framework如何创建数据库模式。

由于POCO不包含任何描述数据库状态的额外属性,因此可以轻松地将它们序列化为JSON或XML。但是,这并不意味着您应该始终将您的Entity Framework模型直接暴露给客户端

 

创建以下POCO:产品、订购、订单详情

要创建每个类,请在解决方案资源管理器中右键单击Models文件夹。从上下文菜单中,选择“ 添加”,然后选择“ 类”。

添加Product具有以下实现的类:

namespace ProductStore.Models

{

    using System.ComponentModel.DataAnnotations;

 

    public class Product

    {

        [ScaffoldColumn(false)]

        public int Id { get; set; }

        [Required]

        public string Name { get; set; }

        public decimal Price { get; set; }

        public decimal ActualCost { get; set; }

    }

}

 

按照惯例,Entity Framework使用该Id属性作为主键,并将其映射到数据库表中的标识列。创建新Product实例时,不会为其设置值Id,因为数据库会生成值。

ScaffoldColumn属性告诉ASP.NET MVC跳过Id生成编辑表单时财产。将所需的属性是用来验证模型。它指定该Name属性必须是非空字符串。

添加Order课程:

namespace ProductStore.Models

{

    using System.Collections.Generic;

    using System.ComponentModel.DataAnnotations;

 

    public class Order

    {

        public int Id { get; set; }

        [Required]

        public string Customer { get; set; }

 

        // Navigation property

        public  ICollection<OrderDetail> OrderDetails { get; set; }

    }

}

添加OrderDetail课程:

namespace ProductStore.Models

{

    public class OrderDetail

    {

        public int Id { get; set; }

        public int Quantity { get; set; }

        public int OrderId { get; set; }

        public int ProductId { get; set; }

 

        // Navigation properties

        public Product Product { get; set; }

        public Order Order { get; set; }

    }

}

 

外键关系

订单包含许多订单详细信息,每个订单详细信息指的是单个产品。为了表示这些关系,OrderDetail该类定义了名为OrderId和的属性ProductId。实体框架将推断这些属性表示外键,并将向数据库添加外键约束。

见图image2.png

该Order和OrderDetail教学内容还包括“导航”的属性,它包含对相关对象的引用。根据订单,您可以按照导航属性导航到订单中的产品。

立即编译项目。实体框架使用反射来发现模型的属性,因此它需要编译的程序集来创建数据库模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值