我正在运行efcore 2.0.1。
我有一个模型:
public class BigAwesomeDinosaurWithTeeth
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
public ICollection<YummyPunyPrey> YummyPunyPrey { get; set; }
}
public class YummyPunyPrey
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
public Guid? BigAwesomeDinosaurWithTeethId { get; set; }
[ForeignKey("BigAwesomeDinosaurWithTeethId")]
public BigAwesomeDinosaurWithTeeth BigAwesomeDinosaurWithTeeth { get; set; }
}
我在这两个类上没有流利的api。但当我生成迁移时
constraints: table =>
{
table.PrimaryKey("PK_YummyPunyPrey", x => x.Id);
table.ForeignKey(
name: "FK_YummyPunyPrey_BigAwesomeDinosaurWithTeeth_BigAwesomeDinosaurWithTeethId",
column: x => x.BigAwesomeDinosaurWithTeethId,
principalTable: "BigAwesomeDinosaurWithTeeth",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
为什么它会生成onDelete:ReferentialAction。当文档说明应将其作为ClientSetNull处理时进行限制
https://docs.microsoft.com/en-us/ef/core/saving/cascade-delete
行为名称|对记忆中的依赖项/子项的影响|对数据库中的依赖项/子项的影响
ClientSetNull(默认)|外键属性设置为null |无
EF Core 2.0中的更改:在早期版本中,Restrict将导致跟踪的依赖实体中的可选外键属性设置为null,并且是可选关系的默认删除行为。在EF Core 2.0中,引入ClientSetNull来表示该行为,并成为可选关系的默认值。对限制行为进行了调整,使其不会对依赖实体产生任何副作用。
任何关于为什么会发生这种情况的帮助都将不胜感激。
EF Core 2.0.1元数据和迁移使用不同的枚举来指定删除行为,分别是DeleteBehavior
和ReferentialAction
。虽然第一种方法有很好的文档记录,但第二种方法和两者之间的映射没有(在撰写本文时)。
这是当前映射:
DeleteBehavior ReferentialAction
============== =================
Cascade Cascade
ClientSetNull Restrict
Restrict Restrict
SetNull SetNull
在您的情况下,该关系是可选的,因此按约定的删除行为是ClientSetNull,它映射到onDelete:Restrict,或者换句话说,强制(启用)FK而不级联删除。
如果您想要不同的行为,您必须使用Fluent API,例如。
modelBuilder.Entity<BigAwesomeDinosaurWithTeeth>()
.HasMany(e => e.YummyPunyPrey)
.WithOne(e => e.BigAwesomeDinosaurWithTeeth)
.OnDelete(DeleteBehavior.SetNull); // or whatever you like
问题内容: 我想开始在新项目中使用表关系。 经过一番搜索之后,我将2个表设置为InnoDB: 我要链接的键是 ->用户->用户ID(主要)->会话->用户ID(索引) 在此过程中,我唯一不了解的是“更新时”和“删除时”的不同设置做了什么 这里的选项是: - (没有?) 级联(???) 设置为空(将所有内容设置为空吗?) 不采取行动(嗯…) 限制 (???) 我基本上希望在用户完全删除后删除会话中的
使用斜扣。ASP中的AspNetCore。NET Core webapp,我们有如下响应类型: 使用Swashback发出swagger API JSON时,这将变成: 这里的问题是,DateTime是一种值类型,不能为null;但是发出的Swagger API JSON没有将这两个属性标记为必需的。这种行为对于所有其他值类型都是一样的:int、long、byte等,它们都被认为是可选的。 为了完
问题内容: 我如何从elasticsearch中获取所有结果,因为结果仅显示限制为10。我有一个查询,像: 我已将限制设置为15,但我不想使其无限,以便我可以获取所有数据,因为我的数据不断变化,并且我想获取所有数据,所以我无法设置限制。 问题答案: 您可以使用和参数浏览所有数据。这可能非常慢,具体取决于您的数据以及索引中有多少。 http://www.elastic.co/guide/zh-CN/
问题内容: 我正在使用Spring将JMS连接工厂注入到我的Java应用程序中。由于仅在生产环境中才需要该工厂,但是在开发过程中却不需要,因此我将Bean定义放入单独的XML中,并将其包含在主applicationContext.xml中。在生产环境中,此额外文件包含常规bean定义。在我的本地开发环境中,我希望此bean为null。当Spring遇到一个未知的引用ID时,试图完全完全删除Bean
关闭连接引用后是否需要/良好做法将其设置为null? 在性能测试期间,我面临连接等待超时异常,因为超过了最大连接数。
Repository This repository is home to the following .NET Foundation projects. These projects are maintained by Microsoft and licensed under the MIT License. Entity Framework Core Microsoft.Data.Sqlite