当主键具有不同名称时,如何使用 TPT 继承模型?

2023-12-15

针对旧数据库使用 Entity Framework 4.1,我无法生成一组非复数的 TPT 继承模型工作集,并且对公共主键使用不同的名称。

我正在使用数据库表“组织”、“帐户”和“公司”,如下所示:

Organization
  OrganizationID (int PK)
  OrgName (varchar)

Company
  CompanyID (int PK)
  CompanyNo (varchar)

Account
  AccountID (int PK)
  AccountNo (varchar)

Account.AccountID 和 Company.CompanyID 具有 FK 约束,即这些列中的值也必须包含在 Organization.OrganizationID 中,因此如果没有 Organization 行,则两者都不能存在。如果我从头开始设计这些表,Account 和 Company 都会使用 OrganizationID 作为其主键。

public partial class BusinessEntities : DbContext
{
    public BusinessEntities()
        : base("name=BusinessEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Organization>().ToTable("Organization");

        // Override pluralization
        modelBuilder.Entity<Company>().ToTable("Company");
        modelBuilder.Entity<Account>().ToTable("Account");

        // Set primary key column for each
        modelBuilder.Entity<Company>().Property(
            e => e.OrganizationID).HasColumnName("CompanyID");
        modelBuilder.Entity<Account>().Property(
            e => e.OrganizationID).HasColumnName("AccountID");
    }

    public DbSet<Organization> Organization { get; set; }
}

public partial class Organization
{
    public int OrganizationID { get; set; }
    public string OrgName { get; set; }
}

public partial class Account : Organization
{
    public string AccountNo { get; set; }
}

public partial class Company : Organization
{
    public string CompanyNo { get; set; }
}

当我尝试使用下面列出的简单选择代码时,我收到错误:

属性“OrganizationID”不是 声明属性为“Company”类型。 确认该房产没有被 明确从模型中排除 使用忽略方法或 NotMappedAttribute 数据注释。 确保它是一个有效的原语 财产。

static void Main(string[] args)
{
    using (var context = new BusinessEntities())
    {
        foreach (var b in context.Organization.OfType<Company>())
        {
            Console.WriteLine("{0} {1}", b.CompanyNo, b.OrgName);
        }

        foreach (var b in context.Organization.OfType<Account>())
        {
            Console.WriteLine("{0} {1}", b.AccountNo, b.OrgName);
        }
    }
    Console.ReadLine();
}

我描述了TPT映射here。这是一步一步的,所以它应该可以工作,但您需要在子实体中映射 Id。

但问题是,您首先从模型开始,生成依赖于 EDMX 的 DdContext,然后删除该 EDMX 并开始自己定义映射。您应该决定是否要使用模型优先或代码优先。你只是在 EDMX 上浪费了精力。

如果您想知道如何将模型优先与 DbContext 检查结合使用本文。如果您想使用代码优先,请不要创建 EDMX 并关注这篇文章映射您的继承。

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

当主键具有不同名称时,如何使用 TPT 继承模型? 的相关文章

随机推荐

  • 回调函数示例

    我很难理解如何callback 函数在以下代码块中使用 我们如何使用callback 作为一个函数 在函数体内 当function callback 还没有定义 将 true false 作为参数传递到下面的回调函数中会有什么影响 感谢您的
  • Haskell 树上折叠的变化

    给定一棵树定义为 data Tree a Leaf Node Tree a a Tree a deriving Eq Show 我想使用该功能 foldTree b gt a gt b gt b gt b gt Tree a gt b fo
  • 如何阻止 Filezilla 更改我的换行符?

    我正在从 Linux Web 服务器下载 perl CGI 文件 它有 Unix 换行符 我在 Windows PC 上用一个不错的文本编辑器 Geany 编辑它 它保留了这些换行符 然后我用 Filezilla 再次上传它 它有 DOS
  • 如何在 Python 中将数字列表转换为 jsonarray

    我有以下格式的一行 row 1L 0 1 0 2 1234L 1 134L 2 现在 我想要在文件中写入以下内容 1 0 1 0 2 1234 1 134 2 基本上将上面转换为 jsonarray 吗 Python 中是否有内置方法 库或
  • 如何解决 org.postgresql.jdbc.PgConnection.createClob() 尚未实现

    例外情况 当启动 spring boot 应用程序时 我收到了 引起原因 java sql SQLFeatureNotSupportedException 方法 org postgresql jdbc PgConnection create
  • 如何在禁用 SSL 卸载的情况下使 ARR 正常工作? 502.3 错误网关

    所以我已经遇到这个错误好几天了 我用谷歌搜索了又搜索 但似乎没有什么可以解决我的情况 我希望有人可以提供帮助 问题 当我在 ARR 路由规则 中禁用 SSL 卸载时 我收到以下信息 502 Web 服务器在充当 Web 服务器时收到无效响应
  • 学习使用 Xcode 和 Objective-C 基础知识进行 iPhone 开发的最佳地点是哪里? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 当我说最好的地方时 我指的是实体课程 研讨会 讲习班等 它可能遍布世界各地 Thanks 我会避开神学院来学习 Objective C 我听说过关于大书呆子牧场培训班
  • C++ 多重继承转换如何工作?

    这个问题帮助我理解了一些 但我的问题与他们的略有不同 据我了解 C 中的基本类型转换涉及将内存中的结构重新解释为不同的结构 例如 class Building int sqFootage class Office public Buildi
  • RMarkdown 生成 HTML 文档注释/评论窗格

    我正在从 Word 文档报告转向使用 RMarkdown 生成的 HTML 文件 然而 我的客户在放弃 Word 后会错过的一大功能是能够轻松地直接向文档添加注释 是否存在一些 HTML Java 等代码片段 可以在 HTML 文档的一侧添
  • ASP GridView 在按钮单击时获取行值

    我正在做什么 单击图像按钮时重置用户密码 到目前为止已完成 添加了 GridViewCommandEventHandler 它正确触发 使用代码来自MSDN 我的 e CommandArgument 得到一个空字符串 并且在运行时抛出错误
  • 运行节点应用程序时 bcrypt 无效的 elf 标头

    我正在为学校开发一个 Nodejs 项目 我无法使用 npm 安装 bcrypt 所以我安装了 bcrypt nodejs 并且该项目昨天运行良好 但是今天 当我做 节点应用程序 时 我遇到了这个错误 node modules bcrypt
  • PHP $_REQUEST 作为数组

    我有一个搜索表单 我想将搜索词作为数组 REQUEST 这样我就可以列出每个搜索词 将每个搜索词包装在一个跨度中以进行样式设置 我怎么做 编辑 这是请求的代码
  • Swift 3.0 无法解析 DispatchQueue 的标识符

    我几个小时以来一直试图找到这个问题的答案 但仍然无济于事 我正在尝试使用以下代码 func fetchPosts ref child Amore child Posts observeSingleEventOfType Value with
  • 我正在尝试将 SFTP 文件(SAS 数据集或令牌)从一台服务器传输到 SAS 中的另一台服务器

    这是我第一次尝试使用 SAS 对文件进行 SFTP 我尝试使用文件名语句 但出现了一些错误 let user userid filename source sftp input sas7bdat user user pass passwor
  • 如何使用多部分实体将图像上传到服务器?

    我正在创建一个应用程序 并在我的应用程序中添加了一个选项来从图库浏览图像 然后上传到服务器 我之前问过这个问题 但没有得到好的答案 为了上传图像 我正在遵循本教程http mayanklangalia blogspot in 2014 04
  • 在 DLL 上使用 WPF 动态创建图像(而不是 GDI+)

    我需要动态生成图像 在阅读教程后here我意识到我可以使用 WPF 中的所有控件和布局来生成渲染 然后将其另存为 JPG 这个想法是使用它来代替 GDI 这是相当原始的 问题是 如何创建一个常规 dll 文件 该文件将以编程方式生成 WPF
  • 使用进程构建器执行两个命令

    我正在尝试编写一个程序 从命令提示符编译另一个 java 文件 不过我有一个问题 此时 它已成功执行编译 Mocha java 的第一部分 但是 我希望它也执行该文件并显示它的输出内容 它什么也没显示 有什么建议么 pb new Proce
  • 以编程方式将加载项宏添加到快速访问工具栏

    我有一个用于格式化 Excel 报告的宏 该宏需要在许多不同的工作簿上运行 因为每天都会生成报告并将其保存到新文件中 这已经在我的个人作业簿中了 我现在需要分享这个宏 我的计划是将该加载项放在我的本地加载项文件夹中 在那里进行任何更新并运行
  • 为Nextjs动态路由添加前缀

    我定义了很多路由 其中 一条路由专用于用户配置文件 每个用户都有一个可通过 HTTP example com username 访问的公共配置文件 我尝试过创建文件pages username js但它似乎不起作用 有没有办法在不通过用户名
  • 当主键具有不同名称时,如何使用 TPT 继承模型?

    针对旧数据库使用 Entity Framework 4 1 我无法生成一组非复数的 TPT 继承模型工作集 并且对公共主键使用不同的名称 我正在使用数据库表 组织 帐户 和 公司 如下所示 Organization Organization