在 Entity Framework 4.1 Code First 中创建双向一对一关系

2023-11-21

我想使用 EF Code First 在两个实体之间创建双向一对一关系。我在使用以下代码时遇到问题。你觉得我应该怎么做?

public class User
{
    public string ID { get; set; }
    public string LastName { get; set; }
    public string Password { get; set; }
    public string FirstName { get; set; }

    public int ProfileID { get; set; }
    public Profile Profile { get; set; }

}
public class Profile
{
    public int UserID { get; set; }
    public User User { get; set; }
    public int ProfileID { get; set; }
    public string ProfileName { get; set; }

    public DateTime CreateDate { get; set; }
    public DateTime LastUpdateDate { get; set; }

}

我想在两个实体中都拥有导航属性和外键。

这给了我错误。我可以在 Fluent Mapping API 中做什么来完成这项工作?


用这个:

public class User
{
    public string ID { get; set; }
    public string LastName { get; set; }
    public string Password { get; set; }
    public string FirstName { get; set; }
    public Profile Profile { get; set; }
}

public class Profile
{
    [Key, ForeignKey("User")]
    public int ProfileID { get; set; }
    public string ProfileName { get; set; }
    public DateTime CreateDate { get; set; }
    public DateTime LastUpdateDate { get; set; }
    public User User { get; set; }
}

这是在 EF 中建立一对一关系的唯一有效方法 - 依赖实体的 PK 也必须是主体实体的 FK。 EF 中不存在双向一对一关系,因为它无法在 EF 中工作。

人们有时克服这个问题的方法是两个一对多关系,其中主体没有依赖实体的导航集合+数据库中手动定义的唯一键。需要手动映射:

public class User
{
    public string ID { get; set; }
    public string LastName { get; set; }
    public string Password { get; set; }
    public string FirstName { get; set; }
    // one side MUST be nullable otherwise you have bidirectional constraint where each
    // entity demands other side to be inserted first = not possible
    public int? ProfileId { get; set; } 
    public Profile Profile { get; set; }
}

public class Profile
{
    public int ProfileID { get; set; }
    public string ProfileName { get; set; }
    public DateTime CreateDate { get; set; }
    public DateTime LastUpdateDate { get; set; }
    public int UserId { get; set; }
    public User User { get; set; }
}

在映射中您将定义:

modelBuilder.Entity<User>
            .HasOptional(u => u.Profile)
            .WithMany()
            .HasForeignKey(u => u.ProfileId);
modelBuilder.Entity<Profile>
            .HasRequired(u => u.User)
            .WithMany()
            .HasForeignKey(u => u.UserId);

现在您必须在数据库中定义唯一键 - 如果您使用代码首先使用自定义数据库初始化河请注意,双向一对一仍然是错误的概念,因为双方都需要唯一的 FK,其中 NULL 仍然包含在唯一值中,因此一旦插入User before Profile一定没有其他的User没有Profile。这可能会导致可序列化事务。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Entity Framework 4.1 Code First 中创建双向一对一关系 的相关文章

  • EF 代码优先外键

    我正在与 EF Code First 库合作 尝试开发约会安排应用程序 我的模型将是客户端 约会和约会类型 基本上每个客户端都可以有一组约会 每个约会可以有一个约会类型 代码如下 public class Client ScaffoldCo
  • 实体框架核心代码优先:多对多关系的级联删除

    我正在使用 Entity Framework Core 版本 EntityFramework Core 7 0 0 rc1 final 由 SQL Server 2012 Express DB 支持 我需要建立一个多对多关系模型Person
  • 实体框架中的自引用/父子关系

    我读了很多程序员的帖子 其中涉及到无法确定相关操作的有效顺序 由于外键约束 模型要求或存储生成的值 可能会存在依赖关系 在实体框架中使用自引用关系时出现异常 我正在努力建立亲子关系 public class Category public
  • 开发和生产数据库

    我和我的团队目前正在做一个项目 我们使用实体框架 4 1 代码优先 我们想编写一些测试 但我们不希望它们在我们的主数据库上运行 因为我们在新加坡有一个团队为我们所做的事情编写客户端 并且他们不断访问该数据库 因此 为了避免运行测试时出现干扰
  • 如何在实体框架 4.3.1 中禁用迁移?

    有没有办法在 Entity Framework 4 3 1 中禁用迁移 我从项目中删除了迁移文件夹以及数据库中生成的表 但它不起作用 如何删除迁移 如果您不想使用迁移 但同时希望 EF 为您创建数据库 则只需设置正确的数据库初始值设定项 D
  • EF 4.1 Code First 和现有数据库以及 .NET 成员资格

    我的开发盒上有一个名为 ApplicationName Development 的数据库在 SQL Server 2008 R2 Developer 版本上运行 我将 NET 成员资格表添加到数据库中没有任何问题 当我尝试让 Code Fi
  • Neo4J - 存储到关系与节点中

    我想知道将数据存储到关系或节点中是否有任何优点或缺点 例如 如果我要将与讨论相关的评论存储到数据库中 我应该将评论数据存储在 评论 关系中 还是通过单独的关系存储在与讨论相关的 评论 节点中 正确的数据模型取决于您需要进行的查询类型 您应该
  • 实体框架代码优先属性与流畅的 API 配置相结合

    我可以将代码优先属性与 Entity Framework 中的实体的 Fluent API 配置结合使用吗 谢谢 是的你可以 我通常更喜欢定义一些约束 例如 通过使用来创建所需的属性 Required 或通过使用定义字符串属性的长度Stri
  • 您可以使用实体框架 4.1 代码优先方法创建 sql 视图/存储过程吗

    Entity Framework 4 1 Code First 非常适合创建表和关系 是否可以使用代码优先方法创建 sql 视图或存储过程 任何有关此的指示都将受到高度赞赏 多谢 我们在实体框架代码优先迁移中支持存储过程 我们的方法是创建一
  • 如何在 EF Code First 中映射表拆分?

    如何使用 EF Code First 映射表拆分 例如 描述了 EDMX 的表拆分here http thedatafarm com blog data access ef table splitting ndash the opposit
  • 为什么 DbSet.Add 工作这么慢?

    8 个月前曾在这里讨论过同样的话题 如何加快 DbSet Add 的速度 https stackoverflow com questions 4355474 how do i speed up dbset add 除了使用 SqlBulkC
  • Entity Framework 4 Code-First 多对多插入

    我在数据库层使用代码优先模式 我有两个 POCO 课程 public class Order Key public int OrderId get set public virtual ICollection
  • 如何在 Entity Framework 4.1 的 Code-First Fluent API 中以编程方式定义关系

    我正在玩新的 EF4 1 unicorn love 我试图了解我可以使用的不同方式代码优先 to 以编程方式定义几个简单 POCO 之间的关系 我如何定义以下 gt 1 Team有0 多Users 和一个User是在 1Team 1 Use
  • 如何在实体框架代码优先中设置 0..* 关系?

    我有两个类的下一个代码 public class Object public int ObjectID get set public int Object2ID get set public virtual Object2 Object2
  • Laravel 关注者/关注关系

    我正在尝试在 laravel 中制作一个简单的关注者 关注系统 没什么特别的 只需单击一个按钮即可关注或取消关注 并显示关注者或关注你的人 我的问题是我不知道如何建立模型之间的关系 这些是迁移 用户迁移 Schema create user
  • 实体框架 4.1:重写 IEnumerable 验证

    public abstract class Animal IValidatableObject public string Id get set public string Name get set public virtual IEnum
  • 实体框架代理创建

    我们可以通过使用来停止在上下文构造函数中创建代理 this Configuration ProxyCreationEnabled false 在 EF 4 1 中创建代理有哪些优点和缺点 代理对于两个功能是必需的 延迟加载 导航属性在第一次
  • 播种多对多数据

    您好 我正在尝试为我的项目创建一些种子 但我在将多对多关系数据播种到数据库时遇到问题 My database看起来像这样 in 教师技能 教师ID and Skill ID当然是他们的表的外键 My seeder看起来像这样 protect
  • 如何为 LINQ 查询构建动态 FROM 子句?

    我有一个标准 LINQ 查询 var list from x in SomeDataContext ViewName where Rest of where clause select x 我想知道是否可以构建动态 LINQ 查询 以便我可
  • 我如何加入 Eloquent:关系?

    我的查询是这样的

随机推荐

  • 更改 SCNText 节点对象的颜色或纹理(Swift - Scenekit)

    如何设置 SCNText 对象的纹理 这就是我所拥有的 外观没有任何变化 myNode is a working SCNText element let mat SCNMaterial met diffuse contents UIImag
  • 如何在 Scala 中提前返回[重复]

    这个问题在这里已经有答案了 我现在正在学习Scala 我喜欢做的一件事是尽早返回 我相信这对每个人来说都更容易阅读 因为我们只是删除了之前的无效状态 现在 由于 Scala 是一种函数式语言 而且我读到削减计算是不好的函数式风格 我想知道是
  • 使用Databricks Job api调用databricks笔记本运行-提交端点

    我正在尝试建立一个调用 databricks 笔记本的 AWS lambda 函数 在 s3 触发器的情况下 我知道我必须在 lambda 函数 python 代码中使用 databricks 的 Jobs API 来使用以下命令发出 PO
  • Process.Start 在某些客户端上随机阻塞/挂起

    有一个非常相似的话题从未得到解决 here 我们有一个大型应用程序在多个客户端上运行 但最近我的一些代码停止工作 添加一些调试代码 我发现代码在调用 Process Start 时停止 没有设置 shellexecute true 通话很简
  • 由于缺少对象而导致 Git 损坏,我该怎么办?

    我刚刚去克隆另一台远程服务器上的存储库 并在尝试这样做时遇到了问题 git clone email protected blah blah docs git Cloning into docs remote Counting objects
  • C/C++ 中最好的加密库是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 C C 中最好的加密库是什
  • Selenium 2 - 将焦点切换到没有名称/ID 的框架

    所以现在我想弄清楚当框架没有名称或 ID 时如何将焦点切换到 Selenium 2 中的框架 对于命名框架我这样做 driver SwitchTo Frame FrameName 但没有名字是什么 有人有这方面的经验吗 driver swi
  • 将 javax.ws.rs 实体序列化为 json

    我想序列化为 Jsonorg glassfish jersey执行 Map
  • ARM 模板 Azure Web App - 如何指定堆栈设置(.NET、.NET Core...)?

    在 Azure Web App 的 ARM 模板中 如何指定应用程序的堆栈设置 NET NET Core PHP 我看不到它的任何字段 谢谢 当您在门户上创建 azure webapp 时 选择Running stack as Net Co
  • 通用类和 Type.GetType()

    有点困惑 我有一个通用类 public abstract class MyClass
  • 如何以编程方式创建适用于 XP、Vista 和 Windows 7 的文件关联

    我希望能够从我的程序注册我的文件扩展名 将文件类型与我的程序关联起来 有很多关于此的文章 但据我所知 所讨论的技术 摆弄注册表 仅适用于 Windows XP 将文件类型与程序关联起来使其在 XP Vista 和 Windows 7 下也能
  • 您无权写入文件“ostream”所在的文件夹

    I had an error while editing a C file and Xcode put out a suggestion I clicked fix and I ve been getting this pop up eve
  • 如何在常用的 java 代码中运行 OSGi 框架?

    有人能给我一个如何使用 osgi 框架类的例子吗 我不知道如何使用这些课程 BR Markus 这取决于您使用的 OSGi 实现 我使用 Eclipse Equinox 并从常规 java 类中启动该框架 Eclipse jar 名为 or
  • iOS7 Tableview删除行最佳实践

    在 iPhone 上 有一个教科书示例 介绍如何删除消息应用程序中的表格视图行 这似乎使用三个单独的视图来执行任务 我的问题是 是否有捷径可以实现这一目标 或者您是否只是创建三个屏幕并做一些显而易见的事情 非常感谢 从故事板中删除一行非常简
  • 如何查看 HttpContext.Cache 中的内容

    有没有什么好的工具可以查看我的数据中有多少数据 或者更好的是该数据的值 HttpContext Cache Isis是 ASP NET 应用程序的控制面板 可以轻松查看应用程序的程序集 调试与否 日志记录 错误 cache 会话 性能计数器
  • 优雅关闭asp.net core

    遇到有关 ASP NET Core 应用程序正常关闭的非常过时的信息 有人可以填写更新的信息吗 用例 我想在应用程序退出时取消向领事注册 public static IWebHostBuilder CreateWebHostBuilder
  • keycloak apache 服务器配置存在“混合内容”问题

    在我的 apache 服务器后面配置 keycloak 时遇到问题 混合内容 页面位于 https dev mydomain com auth admin master console 已加载完毕 HTTPS 但请求了不安全的脚本 http
  • iPhone 支持 XML-RPC 吗?

    iPhone 是否支持 XML RPC 他们有我可以使用的开源框架吗 查看 WordPress 应用程序的源代码 他们可能正在使用 XML RPC http iphone wordpress org
  • 车把访问全局变量:if 语句

    我有一个 hbs 模板 其中有一个对象数组和一个布尔切换变量 切换模板行为 比方说 objs list mode true 我无法访问mode循环内时变量objs 上下文已更改 我想要的是使用 upper 变量创建一个 if 语句 我发现我
  • 在 Entity Framework 4.1 Code First 中创建双向一对一关系

    我想使用 EF Code First 在两个实体之间创建双向一对一关系 我在使用以下代码时遇到问题 你觉得我应该怎么做 public class User public string ID get set public string Las