- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在将 Entity Framework 5
与 Code First 结合使用。我在编写导致某些问题的业务逻辑时更新了我的模型(实体)。从现在开始,当我想创建 1 : N
关系时,我一直在使用这种方法:
Entity-1
{
public int Entity-1ID { get; set; }
public virtual ICollection<Entity-N> Entity-Ns { get; set; }
}
和
Entity-N
{
public int Entity-NID { get; set; }
public int Entity-1ID { get; set; }
public virtual Entity-1 Entity-1 { get; set; }
}
bur 最近我遇到了需要 null 外键的问题(我需要向某些实体添加更多关系),因为我已经在使用 GenericRepository,其中所有类型都是值类型(不可为空)并且还编写了一些代码基于此,我决定改变这一切为时已晚。
因为我已经有了某个实体的外键,我需要将该实体与一个新实体相关联,所以我遇到了一个问题。
我的解决方案是 - 当我有一个新实体时,我只将现有实体的集合添加到新实体(或反之亦然)。困扰我的是——如果我使用它可能会导致什么样的问题。
现在我有实体 Page
在哪里
Page
{
public virtual ICollection<SomeEntity> SomeEntities { get; set; }
}
正如在 SomeEntity
中预期的那样,我没有 Page
的 FK
但是当我查看 Microsoft SQL Management Studio
我看到 SomeEntities
表有一个名为 Page_PageID
的列。
有人能解释一下当我建立这样的关系时到底发生了什么吗?为什么即使我有这个列 Page_PageID
实际上充当 FK
我不能在我的代码中使用它,为什么如果我明确定义 public int PageID { get ;放; }
在 SomeEntitiy
中,我尝试将 int
更改为 int?
我在尝试使用 null 时遇到了各种错误,但是这个自动创建的列 Page_PageID
有空值的记录没有问题。
最佳答案
你的问题:有人能解释一下当我建立这样的关系时到底发生了什么吗?
Page
{
public virtual ICollection<SomeEntity> SomeEntities { get; set; }
}
在Code First中,如果两个实体之间存在集合属性,Entity Framework会创建一对多的关系。这意味着具有集合属性的实体是关系的主体端,另一个实体是从属端结束。并且,在依赖实体的表中,Entity Framework 将生成一个指向主体表的外键。所以,实体Page的集合属性“SomeEntities”会导致Entity Framework在实体“SomeEntity”的表中生成一个外键。
Code Frist 将三种场景视为实体之间的一对多关系。
1.在一个实体中有引用导航属性。
2.在一个实体中有一个集合导航属性(你的Page实体属于这个)。
3.一个实体中有引用导航属性,另一个实体中有集合导航属性。
您的问题:为什么即使我有这个实际上充当 FK 的列 Page_PageID,我也不能在我的代码中使用它。
如果你想使用外键,你应该在实体“SomeEntity”中定义一个外键属性。默认情况下, Entity Framework 生成一个具有以下模式的外键:
[目标类型键名],[目标类型名] + [目标类型键名],或[导航属性名] + [目标类型键名]。这就是为什么你的外键名为“Page_PageID”。你可以使用注释“外键”。
你的问题:为什么如果我显式定义 public int PageID { get;放;在 SomeEntitiy 中,我尝试将 int 更改为 int?我在尝试使用 null 时遇到了各种错误,但是对于这个自动创建的列 Page_PageID 来说,拥有带有空值的记录没有问题..
默认情况下,如果主键是值类型,它的外键将不为空。这意味着需要关系。我看不到您的 Page 实体的键。如果它的类型是 int,则自动创建的列 Page_PageId(Page 的外键)也不会为 null。您是否显示了整个 Page 实体?
如果您没有在 SomeEntity 中定义外键(如 public int PageId),code first 将生成一个以模式 [Target Type Name]_[Target Type Key Name] 命名的外键,即 Page_PageId。在此case(依赖实体中没有外键属性),Entity Framework静默生成的外键将为null。
但是如果你显式定义一个外键属性,比如public int PageId,数据库中外键的可空性将由外键属性的类型决定(值类型不为空)。
所以,就像你的问题一样,当你使用自动创建的 FK 列 Page_PageID 时,FK 为空,你可以插入保留它为空。当你显式定义外键属性时,public int PageID { get;放; },FK PageId 不会为空,因为 PageId 是整数。
还有一些,您可以通过将 PageId 指定为 int? 来控制 FK int 数据库的可空性。同样,按照惯例,Code First 使用外键的可空性类中的属性以确定关系是必需的还是可选的。
关于c# - 当我创建 Code First 关系时只设置一个集合有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20685432/
code
正常吗?
我刚刚开始使用 YARD 来记录我的 Rails 应用程序。我没有指定任何特定的标记处理程序,但我希望 `code` 会转换为 code,但这似乎没有发生。这是正常行为吗?我是否必须添加一些额外的选项
什么是Code-Server 首先程序员朋友们肯定都用过来自微软的VS Code 这款轻量而又高级的编辑器,拥有丰富的插件库,支持各种语言编译运行。而本文介绍的Code-Server就是coder 公
我是一名高中生,今年开始学习汇编。 我目前正在制作 Pacman 克隆作为我的最终项目。 我遇到的唯一问题是我的代码很大,*.exe 文件几乎有 64KB。 所以我的问题是,如果我转向模型介质,我需要
锁定。这个问题及其答案是locked因为这个问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 挑战 按字符计数绘制 Code 39 条码的 ASCII 表示的最短代码。 维基百科关于代码 3
我正在开发 VS 代码的扩展(使用 javascript)。现在我需要安装 VS Code 的路径。 windows有一种方法: var child = require('child_process'
[Windows 10] 我在自定义目录中安装了“Microsoft VS Code(用户设置)”,每当我尝试更新它时,都会显示: 然后这个 Log Info Dec 23 11:42:40.673
我正在尝试更新我的 VS 代码,但收到一条错误消息:由于防病毒软件和/或进程失控,更新可能会失败。 附加了一个来 self 的用户的日志文件,但我不确定要检查什么。我对计算机和编程还是个新手。 最佳答
几天前我安装了 Kali Linux。我正在尝试使用 Code-OSS 而不是 VSCode,因为最新版本的 Kali 没有安装普通版本所需的库。 如果我尝试使用 code-oss . 或 code
我正在从 Atom 迁移到 VS Code,因为这似乎是当今所有酷 child 都在使用的东西。 在 atom 中,我能够如图所示突出显示当前行号(装订线中的蓝色突出显示)。 有没有办法在 VS Co
我试图找到一个明确的 G 代码语法规范,而不是单个 G 代码的含义,我无处不在的规范,我的意思是详细的语法规范,目的是编写解析器。 我编写解析器没有问题,我只是在寻找语法规范,例如。我知道您不必总是为
我想在 VS Code (Windows) 中使用 Fira Code,并且已经按照 instructions 中的说明配置了字体。 。不知何故,字体看起来很模糊。我该如何解决这个问题? "edito
这个问题已经有答案了: How can I navigate back to the last cursor position in Visual Studio Code? (16 个回答) 已关闭
如何选择当前单词,即插入符号所在的位置。 注意:我正在寻找 Visual Studio Code(VS Code)(文本编辑器)的快捷方式,而不是 Visual Studio IDE。 最佳答案 在
我需要在 VS Code 中安装 flutter 但在安装扩展中,我有这个错误 Unable to install 'Dart-Code.flutter'; there is no available
memberData
有什么区别
{@code memberData} 和有什么区别?和 memberData在 JavaDoc 中 最佳答案 有两个主要区别: {@code ...}更简洁:更易于阅读(和输入)。 {@code ..
我有这样一个字符串: Here is my code sample, its not too great: [CODE] [/CODE] I hope you enjoy. 现在我想用 highli
在 VS Code 中,我有一个少于 50 个文件的 Vue 项目,但是在运行开发服务器时 VS Code 抛出 Error: ENOSPC: System limit for number of f
Source Code Pro 如何在 VSC 中使用 ExtraLight ~? 似乎以下不起作用...... 我确定我有字体。 Source Code Pro ExtraLight 最佳答案 编辑
我对 Visual Studio Code 很陌生。我正在尝试调试一个已经存在的应用程序,我已经通过 Git 克隆了它。我的文件都没有被修改。我已经下载了微软扩展“C# for Visual Stud
Visual Code VS Visual Studio Code Insider 我还是不明白这两者有什么区别,难道其中一个是新功能的试用版吗? 最佳答案 Visual Studio Code In
我是一名优秀的程序员,十分优秀!