首页
学习
活动
专区
圈层
工具
发布

ASP.NET MVC5高级编程——(3)MVC模式的模型

而模型一般有:面向业务的模型对象和面向视图的模型对象。 2 什么是主键属性,什么是外键属性?...首先数据库中主外键的定义: 主键 外键 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 作用: 用来保证数据完整性 用来和其他表建立联系用的...个数: 主键只能有一个 一个表可以有多个外键 因为这个主外键属性对于理解后面的EF框架(ORM)很有帮助,所以这里我们多讲一些!...而称ArtistID属性为外键属性(foreign key),因为与模型对应的数据库中,专辑表(Album)和艺术家(Artist)表存在对应的外键关系,即ArtistID是Album表的外键!...该派生类具有一个或多个DbSet类型的属性,类型DbSet中的每一个T代表一个想要持久保存的对象。

6.3K40

EF Core索引

索引是跨多个数据存储区的常见概念。 尽管它们在数据存储中的实现可能会有所不同,但也可用于基于列(或一组列)更高效地进行查找。 不能使用数据批注创建索引。 ...modelBuilder.Entity() .HasIndex(p => new { p.FirstName, p.LastName }); }  备注 按照约定,将在用作外键的每个属性...EF Core 每个不同的属性集仅支持一个索引。 如果使用 "熟知 API" 来配置已定义索引的属性集的索引(按照约定或以前的配置),则会更改该索引的定义。 ...如果要进一步配置由约定创建的索引,则此操作非常有用。 索引唯一性 默认情况下,索引不唯一:允许多行具有与索引的列集相同的值。 ...modelBuilder) { modelBuilder.Entity() .HasIndex(b => b.Url) .IsUnique(); } 尝试为索引的列集插入多个具有相同值的实体将导致引发异常

1.9K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C# 数据操作系列 - 6 EF Core 配置映射关系

    对于其他属性,EF会自动按照同名的形式映射到数据表中。 对于外键,如果在类里添加了引用类型,而这个引用类型也在EF的上下文中,EF会把这种属性称为导航属性。...EF一旦在类里检索到了导航属性,就会去寻找对应的外键。EF会认为 属性名+Id或者类名+Id 可能是外键属性,如果找到名称一致且类型与导航属性目标类的主键类型一致,则认为是外键。...如果类型不一致,EF则认为该类设置有误。如果没找到符合名称要求的属性,EF会自己添加一个外键属性。 对于一对一,EF要求导航属性双方都应该具有外键配置。 一对多,EF要求多的一方设置外键。...同时如果在一方这边设置了集合类型的导航属性,那么EF会自动到目标类里寻找外键属性。 说完了一对一和一对多,那么多对多呢? 如果没有声明的话, EF会生成一个中间表。 2....总结 在这一篇领着大家看了一下EF Core对于映射关系这一部分的内容,我留下了外键相关的FluentAPI介绍,我打算在下一篇介绍。因为这部分的内容比较麻烦,而且使用率也相当高。

    3.2K21

    关于EF Code First模式不同建模方式对建表产生的影响

    今天在学EF Code First模式的时候,发现几个很有趣的问题,问题如下: 1、当编写玩实体后,不指定任何主键约束,EF会找长的最像Id的,然后设置其为主键,验证代码如下: //User类...结论:发现EF在我没有指定那个是主键的情况下,将UserId设为了主键 2、当一个实体中有两个带Id的字段,EF会将最像Id的设为主键,优先级  Id>UserId>UserId_Id class User...EF将Id设为了主键,UserId和UserId_Id的优先级自行验证. 3、关于外键的问题,当在实体中加入导航属性,EF生成外键可能会当前实体中的其他字段的影响.验证代码如下: class PhotoInfo...EF生成了一个User_Id的外键属性,关联User表 下面修改PhotoInfo实体,代码如下: class PhotoInfo { public Guid Id {...EF不再自动生成外键字段,而是将UserId属性设为了外键. 以上都是我测试出来的关于EF默认的行为,比较片面,欢迎指正.

    1.2K60

    Entity Framework 约定

    如果一个类中既没有id属性,也没有类名+id的属性,那么代码在运行时将会报错,因为EF没有找到符合要求的字段创建主键。...EF中定义关系要使用到导航属性,通过导航属性可以定义多个模型之间的关系。大部分情况下我们会将导航属性和外键属性结合在一起使用。...当EF检测出外键属性后,会根据外键属性是否为空来判断关系,如果外键可以为空,那么模型之间的关系将会配置成可选的,Code First 不会再关系上配置级联删除。...OnModelCreating 方法中加入如下代码即可: modelBuilder.Properties().Where(p => p.Name == "Id").Configure(p => p.IsKey()); 注:当多个属性存在相同约定配置时...,最后一个约定将覆盖前面所有相同的约定。

    1.6K10

    Entity Framework Core 2.1,添加种子数据

    种子数据为什么要指定主键的值?  因为在团队开发时,这样可以确保不同的开发人员、电脑、服务器上,在同一个迁移版本具有相同的种子数据。...添加关联种子数据 Province和City是一对多的关系,也就是说一个Province可以有多个City,而且它们之间有导航属性。...我必须单独添加City的种子数据,并且设置好外键。 所以正确的做法是: ? 这次Add-Migration没有报错,迁移也成功了,看一下最后的数据: ?...OK 如果无法在Model里设置主键/外键 有时,我们在主从关系的Model里不明确定义外键;有时候我们Model的主键是private set的; 这时我们就无法在HasData里设置主键/外键的值了...我把City Model里的外键去掉(导航属性仍然保留,和Province的主从关系依然存在): ? 然后就可以这样添加种子数据: ? 迁移后的数据: ? 结果仍然如预期一样。

    1.9K10

    生成的迁移类

    因为在团队开发时,这样可以确保不同的开发人员、电脑、服务器上,在同一个迁移版本具有相同的种子数据。...添加关联种子数据 Province和City是一对多的关系,也就是说一个Province可以有多个City,而且它们之间有导航属性。...我必须单独添加City的种子数据,并且设置好外键。...所以正确的做法是: 这次Add-Migration没有报错,迁移也成功了,看一下最后的数据: OK 如果无法在Model里设置主键/外键 有时,我们在主从关系的Model里不明确定义外键;有时候我们...我把City Model里的外键去掉(导航属性仍然保留,和Province的主从关系依然存在): 然后就可以这样添加种子数据: 迁移后的数据: 结果仍然如预期一样。

    1.3K10

    EF Core 导航属性配置

    所谓的一对多就是其中多方上有一个属性或者列指向了另一个实体,而那个“一”的那头则没有对应的属性指向多方。 多对多是指两个类的实例各有一个集合属性指向对方,换句话说就是A有0到多个B,B也有0到多个A。...意思就是无法定义一对一关系中的子/从属方 如何解决呢?之前在说的时候,EF会根据导航属性自动生成一个外键,但是这一条在一对一这里就有点不太起作用了。...,现在EF只在SingleModel表中生成了一个外键关系,在检索SingleTargetModel的时候,EF会从SingleModel表中检索对应的外键关系,并引入进来。...如果取消这行注释,EF会在SingleTargetModel表添加一个名为SingleId并指向SingleModel的外键,而取消SingleModel里的外键。...在EF 6中 中间表可以仅存在于关系中,但是在EF Core3 还没有这个的支持。也就是当前文章使用的版本。 5. 附加 在EF的外键约束中,导航属性是默认可空的。

    3.9K20

    EntityFramework Core 学习扫盲

    备用键 Alternate Keys是EF CORE引入的新功能,EF 6.X版本中并没有此功能。备用键可以用作实体中除主键和索引外的唯一标识符,还可以用作外键目标。...在Fluent Api中,有两种方法可以指定备用键,一种是当开发者将实体中的属性作为另一个实体的外键目标,另一种是手动指定。EF CORE的默认约束是前者。...Post实体中的BlogUrl属性作为Blog对应Post的外键,指定Blog实体中的Url属性作为备用键(HasPrincipalKey方法将在下文的唯一标识节中讲解),此时Url将被配置为唯一列,扮演...方法,它通常跟在HasForeignKey和WithMany方法后,用以指定实体中的一个或多个属性作为备用键。...唯一需要注意的是,关系设置请从子端(如User和Blog呈一对多对应时,从Blog开始)开始,否则配置不慎容易出现多个外键的情况。

    10.3K90

    Entity Framework 系统约定配置

    在EF中是以一种约定的方式进行表、列同实体类进行映射的,与此同时为了提高最大的灵活性EF中可以通过Fluent API和Data Annotations两种方式对映射进行灵活配置。...3.使用导航属性约束两个表之间的关系,在从表数据类中除了导航属性,推荐定义一个外键属性在从表数据类中(如果不指定将默认生成一个“+的主键名>”的外键列;此外在主表中推荐定义一个集合从表属性用户导航...,当然这个属性不定义也可以正常生成外键关系但是不利于使用),具体规则:“属性名>+的主键属性名>”或者“+属性名>”又或者“的主键属性名>”,其属性名不区分大小写并且如果出现多种匹配按照先后顺序匹配...;如果不存在外键属性则外键关系注册为可选的,否则注册为必选项并且此时将设置级联删除关系;如果在从表类中有多个导航属性对应同一个数据类那么需要使用fluent API或者Data Annotations进行手动配置...Entity Framework 手动定义约定  EF的默认约定不是一成不变的,我们可以选择移除和修改它,例如EF默认生成数据表时将数据类名的复数形式作为表名,下面的代码就可以移除这个规则: using

    1.1K20

    数据库面试题汇总

    MySQL的基本索引类型 索引的优缺点 事务 事务的定义 事务的性质 drop、delete与truncate 相同点 不同点 场景使用 超健、候选键、主键、外键 超健 候选键 主键 外键 视图...数据库指的是以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度的特点、是与应用程序彼此独立的数据集合。...一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。 候选键 最小超键,即没有冗余元素的超键。...主键 数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。 外键 在一个表中存在的另一个表的主键称此表的外键。...视图 视图的定义 视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作。视图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。

    2.1K21

    tdengine入门详解

    数据采集点 数据采集点是指按照预设时间周期或受事件触发采集物理量的硬件或软件。一个数据采集点可以采集一个或多个采集量,但这些采集量都是同一时刻采集的,具有相同的时间戳。...dnode 包含零到多个逻辑的虚拟节点(vnode),零或者至多一个逻辑的管理节点(mnode),零或者至多一个逻辑的弹性计算节点(qnode),零或者至多一个逻辑的流计算节点(snode)。...虚拟节点(vnode): 为更好的支持数据分片、负载均衡,防止数据过热或倾斜,数据节点被虚拟化成多个虚拟节点(vnode,图中 V2,V3,V4 等)。...流计算节点(snode): 一个虚拟的逻辑单元,只运行流计算任务(图中 S)。集群中可配置多个 snode,在整个集群内部共享使用(图中 S1,S2,S3)。...其原因在于,NOW 函数在执行中会被解析为所在 SQL 语句的客户端执行时间,出现在同一语句中的多个 NOW 标记也就会被替换为完全相同的时间戳取值。

    2.6K11

    EF 约定介绍

    ,该集合属性里面的元素是另一个实体时,则默认未一对多关系,即使没有显示的指定一对多的关系,EF会默认的设置主外键(主从)关系 (3)、一对一的实体关系,需要手动设置主从关系 (4)、多对多无载荷关系实体...如果主键属性的类型为数字型或 GUID 则会被当成标识列(Identity Column) 4、关系(外键/导航属性)约定Relationship(Foreign Key/Navigation Properties...除了导航属性规定实体间的关系外,外键属性来式规定实体间方式的一种手段.Code First能够推断以下的命名属性为外键(优先级从上到下): (1)、导航属性名+关联实体的主键名 (2)、关联实体实体名+...关联实体的主键名 (3)、关联实体的主键名 注: (1)、当外键关系被检测到,Code First会根据外键的可空性来推断关系的具体形式;如果外键属性是可空的,那么关系会被设置为可选的,否则,关系就是必选的.... (2)、当关联实体的外键属性被设置为不为空,Code First会设置级联删除,反之不会。

    2.1K100

    Amazon DynamoDB 工作原理、API和数据类型介绍

    与主键外不同,People表是无架构的,这表示属性及其数据类型都不需要预先定义。每个项目都能拥有其自己的独特属性。 大多数属性是标量类型的,这表示它们只能具有一个值。字符串和数字是标量的常见示例。...某些项目具有嵌套属性 (Address)。DynamoDB 支持最高 32级深度的嵌套属性。 这里,我们将看到第一个概念:主键。 主键 创建表时,除表名称外,您还必须指定表的主键。...DynamoDB 会计算分区键的哈希值,从而生成可从中找到该项目的分区。 如果我们查询的项目具有相同的分区键值,则可以通过单一操作 (Query) 读取表中的多个项目。...二级索引 DynamoDB支持在一个表上创建一个或多个二级索引。利用 secondary index,除了可对主键进行查询外,还可使用替代键查询表中的数据。...可以检索整个项目,也可以仅检索其属性的子集。或者,也可以对排序键值应用条件,以便只检索具有相同分区键的数据子集。我们可以对表使用此操作,前提是该表同时具有分区键和排序键。

    7.4K31

    01-EF Core笔记之创建模型

    () .Property("LastUpdated"); 阴影属性 阴影属性指的是在实体中未定义的属性,而在EF Core中模型中为该实体类型定义的属性,这些类型只能通过变更跟踪器进行维护...,显然无论在Blog或Tag中定义外键都不合适,此时就需要一张关系表来进行关联,这张表就是BlogTag表。...)的,所以只需要实例化一次,并在多个模型中进行使用。...实体构造函数 EF Core支持实体具有有参的构造函数,默认情况下,EF Core使用无参构造函数来实例化实体对象,如果发现实体类型具有有参的构造函数,则优先使用有参的构造函数。...使用有参构造函数需要注意: 参数名应与属性的名字、类型相匹配 如果参数中不具有所有字段,则在调用构造函数完成后,对未包含字段进行赋值 使用懒加载时,构造函数需要能够被代理类访问到,因此需要构造函数为public

    3.7K20

    EF Core的增删改查

    不过如果有导航属性的话,在新增的时候,EF Core会自动检索导航属性的另一端是否需要新增到数据库中,如果需要新增的话,EF Core会自动标记为新增的。...而删除,如果在配置导航属性时,没有设置级联删除,删除当前元素,如果另一端的外键是可空类型的,并不会删除导航属性另一端的元素只会设置外键指向为NULL,如果另一端外键是不可空的,那么就会同时删除。...如果需要修改,可以使用以下方法修改,在配置导航属性的时候: OnDelete(DeleteBehavior.Cascade); 对于可为NULL的外键来说,枚举DeleteBehavior的值起以下作用...: 行为名称 对内存中的依赖项/子项的影响 对数据库中的依赖项/子项的影响 Cascade 删除实体 删除实体 ClientSetNull(默认) 外键属性设置为 null None SetNull 外键属性设置为...null 外键属性设置为 null Restrict None None 而对于不可为NULL的外键来说,枚举DeleteBehavior的值起以下作用: 行为名称 对内存中的依赖项/子项的影响 对数据库中的依赖项

    3.9K20
    领券