Entity Framework 了解(一)

2024-08-26 03:18
文章标签 了解 framework entity

本文主要是介绍Entity Framework 了解(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

必备概念了解

(在看这篇文章之前,希望大家对于下面这三个对象的概念有些基本的理解,对象名字上有链接)

EF:Entity Framework 利用了抽象化数据结构的方式,将每个数据库对象都转换成应用程序对象 (entity),而数据字段都转换为属性 (property),关系则转换为结合属性 (association),让数据库的 E/R 模型完全的转成对象模型,如此让程序设计师能用最熟悉的编程语言来调用访问。

ORM:对象关系映射

EDM:实体数据模型

ORM是一种思想,EF是ORM思想的产物之一,而EDM是EF实现ORM思想的核心。

EF的原理

  • 在我们的项目中有一个扩展名为.edmx的文件,这就是EDM模式的表现形式。这个文件的本质是xml文件。
    这里写图片描述
  • 总览XML文件
    这里写图片描述
  • EDM—SSDL
    描述了表、字段、关系、主键及索引等数据库中存在的概念
    这里写图片描述
<!-- SSDL content --><edmx:StorageModels><Schema Namespace="Model.Store" Provider="System.Data.SqlClient" ProviderManifestToken="2008" Alias="Self" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm/ssdl"><EntityType Name="BasicOnClassStudentEntities"><Key><PropertyRef Name="OnClassStudentID" /><PropertyRef Name="OnClassID" /><PropertyRef Name="StudentID" /></Key><Property Name="Operator" Type="varchar" MaxLength="64" /><Property Name="TimeStamp" Type="datetime" /><Property Name="IsEnabled" Type="int" /><Property Name="OnClassStudentID" Type="uniqueidentifier" Nullable="false" /><Property Name="OnClassID" Type="uniqueidentifier" Nullable="false" /><Property Name="StudentID" Type="uniqueidentifier" Nullable="false" /></EntityType><EntityContainer Name="ModelStoreContainer"><EntitySet Name="BasicOnClassStudentEntities" EntityType="Self.BasicOnClassStudentEntities" store:Type="Tables" store:Schema="dbo"><DefiningQuery>SELECT 
[BasicOnClassStudentEntities].[Operator] AS [Operator], 
[BasicOnClassStudentEntities].[TimeStamp] AS [TimeStamp], 
[BasicOnClassStudentEntities].[IsEnabled] AS [IsEnabled], 
[BasicOnClassStudentEntities].[OnClassStudentID] AS [OnClassStudentID], 
[BasicOnClassStudentEntities].[OnClassID] AS [OnClassID], 
[BasicOnClassStudentEntities].[StudentID] AS [StudentID]
FROM [dbo].[BasicOnClassStudentEntities] AS [BasicOnClassStudentEntities]</DefiningQuery></EntitySet></EntityContainer></Schema></edmx:StorageModels>
Entity Type
Name对应数据库表的名称
—Key
—-PropertyRef外键字段
—-Name字段名
Property字段
—Name字段名
—Type字段类型
—MaxLength字段最大长度
—Nullable是否允许Null

DefiningQuery定义通过实体数据模型 (EDM) 内的客户端投影映射到数据存储视图的查询

  • EDM—CSDL
    定义的实体、主键、属性、关联等都是对应于.NET Framework中的类型
    <!-- CSDL content --><edmx:ConceptualModels><Schema Namespace="Model" Alias="Self" annotation:UseStrongSpatialTypes="false" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm"><EntityType Name="BasicOnClassStudentEntities"><Key><PropertyRef Name="OnClassStudentID" /><PropertyRef Name="OnClassID" /><PropertyRef Name="StudentID" /></Key><Property Name="Operator" Type="String" MaxLength="64" FixedLength="false" Unicode="false" /><Property Name="TimeStamp" Type="DateTime" Precision="3" /><Property Name="IsEnabled" Type="Int32" /><Property Name="OnClassStudentID" Type="Guid" Nullable="false" /><Property Name="OnClassID" Type="Guid" Nullable="false" /><Property Name="StudentID" Type="Guid" Nullable="false" /></EntityType><EntityContainer Name="Entities" annotation:LazyLoadingEnabled="true"><EntitySet Name="BasicOnClassStudentEntities" EntityType="Self.BasicOnClassStudentEntities" /></EntityContainer></Schema></edmx:ConceptualModels>
  • EDM—MSL
    将上面的SSDL和CSDL对应,主要包括CSDL属性与SSDL中列的对应
    <!-- C-S mapping content --><edmx:Mappings><Mapping Space="C-S" xmlns="http://schemas.microsoft.com/ado/2009/11/mapping/cs"><EntityContainerMapping StorageEntityContainer="ModelStoreContainer" CdmEntityContainer="Entities"><EntitySetMapping Name="BasicOnClassStudentEntities"><EntityTypeMapping TypeName="Model.BasicOnClassStudentEntities"><MappingFragment StoreEntitySet="BasicOnClassStudentEntities"><ScalarProperty Name="Operator" ColumnName="Operator" /><ScalarProperty Name="TimeStamp" ColumnName="TimeStamp" /><ScalarProperty Name="IsEnabled" ColumnName="IsEnabled" /><ScalarProperty Name="OnClassStudentID" ColumnName="OnClassStudentID" /><ScalarProperty Name="OnClassID" ColumnName="OnClassID" /><ScalarProperty Name="StudentID" ColumnName="StudentID" /></MappingFragment></EntityTypeMapping></EntitySetMapping></EntityContainerMapping></Mapping></edmx:Mappings></edmx:Runtime>

说明1:以上表中很重要的一个属性是MappingFragment中的StoreEntitySet属性,就像这个属性的说明中所说,其描述了CSDL的Entity对应到的SSDL的Entity的名称。这是实现下文EDM映射方案中第二条将一个概念模型的实体映射到多个存储模型的实体的关键设置。
说明2:Contain这个元素及其属性的作用是,当多个概念模型实体映射到一个存储模型实体时,该元素的属性决定了在什么情况下一个概念模型实体映射到指定的存储模型实体。
说明3:QueryView 元素定义概念模型中的实体与存储模型中的实体之间的只读映射。使用根据存储模型计算的 Entity SQL 查询定义此查询视图映射,并以概念模型中的实体表达结果集。同DefiningQuery定义的查询。此映射也是只读的。就是说如果想要更新此类EntitySet,也需要使用下文介绍存储过程时提到的定义更新实体的存储过程的方法,使用定义的存储过程来更新这样的EntitySet。当多对多关联在存储模型中所映射到的实体表示关系架构中的链接表时,必须为此链接表在AssociationSetMapping 元素中定义一个QueryView元素。定义查询视图时,不能在 AssociactionSetMapping 元素上指定 StorageSetName 属性。定义查询视图时,AssociationSetMapping 元素不能同时包含 EndProperty 映射。

这篇关于Entity Framework 了解(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1107397

相关文章

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

Spring Framework系统框架

序号表示的是学习顺序 IoC(控制反转)/DI(依赖注入): ioc:思想上是控制反转,spring提供了一个容器,称为IOC容器,用它来充当IOC思想中的外部。 我的理解就是spring把这些对象集中管理,放在容器中,这个容器就叫Ioc这些对象统称为Bean 用对象的时候不用new,直接外部提供(bean) 当外部的对象有关系的时候,IOC给它俩绑好(DI) DI和IO

PHP: 深入了解一致性哈希

前言 随着memcache、redis以及其它一些内存K/V数据库的流行,一致性哈希也越来越被开发者所了解。因为这些内存K/V数据库大多不提供分布式支持(本文以redis为例),所以如果要提供多台redis server来提供服务的话,就需要解决如何将数据分散到redis server,并且在增减redis server时如何最大化的不令数据重新分布,这将是本文讨论的范畴。 取模算法 取模运

Weex入门教程之1,了解Weex

【资料合集】Weex Conf回顾集锦:讲义PDF+活动视频! PDF分享:链接:http://pan.baidu.com/s/1hr8RniG 密码:fa3j 官方教程:https://weex-project.io/cn/v-0.10/guide/index.html 用意 主要是介绍Weex,并未涉及开发方面,好让我们开始开发之前充分地了解Weex到底是个什么。 以下描述主要摘取于

Java了解相对较多!

我是对Java了解相对较多,而对C#则是因工作需要才去看了一下,C#跟Java在语法上非常相似,而最初让我比较困惑的就是委托、事件部分,相信大多数初学者也有类似的困惑。经过跟Java的对比学习,发现这其实跟Java的监听、事件是等同的,只是表述上不同罢了。   委托+事件是观察者模式的一个典型例子,所谓的委托其实就是观察者,它会关心某种事件,一旦这种事件被触发,这个观察者就会行动。   下

使用WebP解决网站加载速度问题,这些细节你需要了解

说到网页的图片格式,大家最常想到的可能是JPEG、PNG,毕竟这些老牌格式陪伴我们这么多年。然而,近几年,有一个格式悄悄崭露头角,那就是WebP。很多人可能听说过,但到底它好在哪?你的网站或者项目是不是也应该用WebP呢?别着急,今天咱们就来好好聊聊WebP这个图片格式的前世今生,以及它值不值得你花时间去用。 为什么会有WebP? 你有没有遇到过这样的情况?网页加载特别慢,尤其是那

初步了解VTK装配体

VTK还不太了解,根据资料, vtk.vtkAssembly 是 VTK库中的一个重要类,允许通过将多个vtkActor对象组合在一起来创建复杂的3D模型。 import vtkimport mathfrom vtk.util.colors import *filenames = ["cylinder.stl","sphere.stl","torus.stl"]dt = 1.0renW

Post-Training有多重要?一文带你了解全部细节

1. 简介 随着LLM学界和工业界日新月异的发展,不仅预训练所用的算力和数据正在疯狂内卷,后训练(post-training)的对齐和微调方法也在不断更新。InstructGPT、WebGPT等较早发布的模型使用标准RLHF方法,其中的数据管理风格和规模似乎已经过时。近来,Meta、谷歌和英伟达等AI巨头纷纷发布开源模型,附带发布详尽的论文或报告,包括Llama 3.1、Nemotron 340

了解elementUI的底层源码, 进行二次开发

Element UI 是一个基于 Vue.js 的桌面端组件库,广泛用于构建美观、交互友好的用户界面。要深入理解 Element UI 的底层源码并进行二次开发,你需要掌握以下几个关键点: Vue.js 原理 Element UI 是基于 Vue.js 构建的,因此首先需要熟悉 Vue.js 的核心概念和机制,包括: ● 组件系统:Vue.js 的组件化思想,如何定义组件、使用组件、传递属性和事