数据库优先使用桥表,如何将其排除在模型之外

2024-01-07

我试图找出如何制作一个桥接表实体,用于多对多关系,对我的模型透明。我正在使用EF数据库优先.

有问题的表...(简化)

Report
- ReportId INT PK
- ReportName VARCHAR(50)

Group
- GroupId INT PK
- GroupName VARCHAR(50)

ReportGroup
 - ReportId INT PK
 - GroupId INT PK

目前的班级结构...(简化)

public class Report
{
     public int ReportId { get; set; }
     public string ReportName { get; set; }
     public IList<ReportGroup> ReportGroups { get; set; }
}

public class Group
{
     public int GroupId { get; set; }
     public string GroupName { get; set; }
     public IList<ReportGroup> ReportGroups { get; set; }
}

public class ReportGroup
{
     public int ReportId { get; set; }
     public Report Report { get; set; }
     public int GroupId { get; set; }
     public Group Group { get; set; }
}

使用上面的内容,要获取报告所属的组,需要这样的东西......

// Getting a report's groups
var report = this.ReportService.GetReportById(123456);
var groups = report.ReportGroups.Select(x => x.Group).ToList();

这并不是我想在整个应用程序中使用的东西。理想情况下,我希望桥接表和实体(ReportGroup)是透明的,允许我使用这样的实体......

// Getting a report's groups
var report = this.ReportService.GetReportById(123456);
var groups = report.Groups;

// Getting a group's reports
var group = this.ReportService.GetGroupById(1);
var reports = group.Reports;

所以我的问题是 EF 是否可以实现数据库优先,如果是这样,我如何使用 Fluent API 正确连接它模型创建时().

先谢谢您的帮助。


如果您仅将 ReportGroup 用于关系,则不需要此 POCO 类,只需将其映射到 OnModelCreating:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
...
modelBuilder.Configurations.Add(new GroupMap());
...
}

public class GroupMap : EntityTypeConfiguration<Group>
    {
        public GroupMap()
        {
            // Relationships
            this.HasMany(e => e.Reports)
              .WithMany(set => set.Groups)
              .Map(mc =>
              {
                  mc.ToTable("groupreporttablename");
                  mc.MapLeftKey("GroupID");
                  mc.MapRightKey("ReportID");
              });
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据库优先使用桥表,如何将其排除在模型之外 的相关文章

  • 如何使用 openSSL 函数验证 PEM 证书的密钥长度

    如何验证以这种方式生成的 PEM 证书的密钥长度 openssl genrsa des3 out server key 1024 openssl req new key server key out server csr cp server
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • .edmx 文件的用途是什么?

    edmx 文件的用途是什么 阅读 CSDL SSDL 和 MSL 规范 在我看来 edmx 文件仅在设计时使用 我们打算将它与其他 edmx 一起分发吗 看来我们需要分发 ssdl 和 或 csdl 文件 EDMX 是 Visual Stu
  • 如何修复错误:“检测到无法访问的代码”

    我有以下代码 private string GetAnswer private int CountLeapYears DateTime startDate return count String answer GetAnswer Respo
  • OpenGL:如何检查用户是否支持glGenBuffers()?

    我检查了文档 它说 OpenGL 版本必须至少为 1 5 才能制作glGenBuffers 工作 用户使用的是1 5版本但是函数调用会导致崩溃 这是文档中的错误 还是用户的驱动程序问题 我正在用这个glGenBuffers 对于VBO 我如
  • Libev,如何将参数传递给相关回调

    我陷入了 libev 中争论的境地 通常 libev 在类似的函数中接收包 接收回调 没关系 但是实际操作中 我们需要派遣一个亲戚 写回调 根据收到的包裹处理具体工作 例如 S RECV MSG pstRecvMsg S RECV MSG
  • 测量进程消耗的 CPU 时钟

    我用 C 语言编写了一个程序 它是作为研究结果创建的程序 我想计算程序消耗的确切 CPU 周期 精确的循环次数 知道我怎样才能找到它吗 The valgrind tool cachegrind valgrind tool cachegrin
  • LinkLabel 无下划线 - Compact Framework

    我正在使用 Microsoft Compact Framework 开发 Windows CE 应用程序 我必须使用 LinkLabel 它必须是白色且没有下划线 因此 在设计器中 我将字体颜色修改为白色 并在字体对话框中取消选中 下划线
  • C# 获取数据表中所有重复行的计数

    我通过运行存储过程来填充数据集 并且从数据集中填充数据表 DataSet RawDataSet DataAccessHelper RunProcedure storedprocedureName this will just return
  • Unity c# 四元数:将 y 轴与 z 轴交换

    我需要旋转一个对象以相对于现实世界进行精确旋转 因此调用Input gyro attitude返回表示设备位置的四元数 另一方面 这迫使我根据这个四元数作为默认旋转来计算每个旋转 将某些对象设置为朝上的简单方法如下 Vector3 up I
  • 如何在多线程应用程序中安全地填充数据并 Refresh() DataGridView?

    我的应用程序有一个 DataGridView 对象和一个 MousePos 类型的列表 MousePos 是一个自定义类 它保存鼠标 X Y 坐标 类型为 Point 和该位置的运行计数 我有一个线程 System Timers Timer
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • MySQL 连接器 C++ 64 位在 Visual Studio 2012 中从源代码构建

    我正在尝试建立mySQL 连接器 C 从源头在视觉工作室2012为了64 bit建筑学 我知道这取决于一些boost头文件和C 连接器 跑步CMake生成一个项目文件 但该项目文件无法编译 因为有一大堆非常令人困惑的错误 这些错误可能与包含
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • 读取依赖步行者输出

    I am having some problems using one of the Dlls in my application and I ran dependency walker on it i am not sure how to
  • 在哪里可以找到 Microsoft.Build.Utilities.v3.5

    如何获取 Microsoft Build Utilities v3 5 我正在使用 StyleCop 4 7 Stylecop dll 中的 StyleCop msbuild 任务似乎依赖于 Microsoft Build Utilitie
  • 调用 .ToArray() 时出现 ArgumentException

    我有一个经常被清除的列表 代码完全是这样的 VisitorAgent toPersist List
  • 如何从 Windows Phone 7 模拟器获取数据

    我有一个 WP7 的单元测试框架 它在手机上运行 结果相当难以阅读 因此我将它们写入 XDocument 我的问题是 如何才能将这个 XML 文件从手机上移到我的桌面上 以便我可以实际分析结果 到目前为止 我所做的是将 Debugger B
  • 声明一个负长度的数组

    当创建负长度数组时 C 中会发生什么 例如 int n 35 int testArray n for int i 0 i lt 10 i testArray i i 1 这段代码将编译 并且启用 Wall 时不会出现警告 并且似乎您可以分配
  • ContentDialog Windows 10 Mobile XAML - 全屏 - 填充

    我在项目中放置了一个 ContentDialog 用于 Windows 10 上的登录弹出窗口 当我在移动设备上运行此项目时 ContentDialog 未全屏显示 并且该元素周围有最小的填充 在键盘上可见 例如在焦点元素文本框上 键盘和内

随机推荐

  • Node.js 中的用户管理系统

    大多数 Web 应用程序对用户管理的要求相当普遍 用户自行注册 收到一封确认电子邮件 要求忘记密码 管理员为用户分配角色等 是否有一个node js express js项目已经实现了流程并且可以定制 Passport js 允许应用程序仅
  • Spark 中的 DataFrame 到 Json 数组

    我正在用 Java 编写 Spark 应用程序 它读取 HiveTable 并将输出以 Json 格式存储在 HDFS 中 我使用读取配置单元表HiveContext它返回 DataFrame 下面是代码片段 SparkConf conf
  • 用字符串变量替换字符串 - 错误 91

    背景 最近我回答了一个question https stackoverflow com q 57723867 9758194其中涉及查看文件的属性 最终我提供的代码运行良好 但有一件事让我感到困惑 Problem 有两行特定的行 我想用变量
  • 包裹错误 - 找不到模块 @parcel\fs-search\fs-search.win32-x64-msvc.node

    我最近将 Windows 从 Windows 10 更新到了 11 更新 我再次重新安装了 Windows 10 但收到了同样的错误 当我运行yarn start或npm start时 我收到以下错误 yarn start yarn run
  • 我们可以看到 pandas.core.groupby.SeriesGroupBy 对象中的组数据吗

    我们可以检查a中的数据吗pandas core groupby SeriesGroupBy object 第一个选项 迭代所有组 for name group in df groupby column print name print gr
  • 非规格化数 - IEEE 754 浮点

    因此 我试图了解有关 IEEE 754 浮点数标准中定义的非规范化数字的更多信息 感谢 Google 搜索结果 我已经阅读了几篇文章 并且浏览了几篇 StackOverFlow 帖子 然而我还有一些问题没有得到解答 首先 回顾一下我对非规范
  • BLE:使用 CoreBluetooth 在 2 个 ios 设备之间传输图像

    我有 2 台 iOS 设备 一台是 Peripheral 另一台是 Central 我希望数据是图像 我尝试过使用字符串值 它工作正常 但使用图像时出现此错误 read user chunkIDOT 1221 无效的 PNG 文件 没有有效
  • 按日和月过滤 SPARQL 结果

    我目前正在使用http dbpedia org snorql http dbpedia org snorql网站发起一些基本请求 如下所示 PREFIX dbpedia0
  • 一直出现 WebResource.axd?d=.... 错误

    我有一个 ASP NET C 应用程序 但总是遇到不同的错误 如下所示 有谁知道如何解决这个问题 谢谢 Page http www sitename com WebResource axd d OYuYekAZWSmOdOaJyDRqKg2
  • 如何在 Perl 中实时读取外部命令的输出?

    我运行了一些 bash 脚本 但它们可能需要几个小时才能完成 在此期间它们会显示下载速度 预计到达时间和类似信息 我需要在 perl 中捕获这些信息 但是我遇到了一个问题 我无法逐行读取输出 除非我遗漏了一些东西 有帮助解决这个问题吗 编辑
  • 如何在Python中及时删除T和Z

    我正在尝试删除T and 000Z在我的数据中 2018 03 20T19 48 12 000Z 2018 07 20T14 33 09 000Z 2018 07 20T14 33 55 000Z 我想获得如下所示的时间戳 2018 03
  • Symfony2 扩展 - Behat Mink

    我为 Behat Mink 安装了 Symfony2 扩展here http extensions behat org symfony2 当我运行测试时 出现错误 ReflectionException 类 AppKernel 不存在 我究
  • 协调 ASP.NET 脚本包和源映射

    有什么办法可以设置默认吗System Web Optimization ScriptBundle生成源地图 http www html5rocks com en tutorials developertools sourcemaps 对于捆
  • 正则表达式以 3 为单位计数

    我正在自学正则表达式 并找到了一个测验网站 该网站一直在帮助我找到更多正则表达式的应用程序 并一直在帮助我扩展对它们如何工作的知识 我发现一个问题要求我形成一个正则表达式来匹配 3 的倍数的 10 位数字 我能想到的唯一方法是让正则表达式识
  • E/ExoPlayerImplInternal:源错误 com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException:响应代码:404

    我正在尝试通过 exo 播放器播放视频 但它给了我这个错误 E ExoPlayerImplInternal 源错误 InvalidResponseCodeException 响应代码 404 这是我的活动课 public class Vid
  • Postgresql 从 phpPgAdmin 插入查询语法错误

    尝试执行标准插入查询 但它不起作用 INSERT INTO users vk id eu name eu society eu notes eu want team VALUES 123123133 Eu name Eu society E
  • 无法理解 MyApp 崩溃的地方

    我的应用程序在某些情况下崩溃 无法找到崩溃原因和地点 以下是崩溃日志 iPad iOS 8 0 2 Hardware Model iPad2 5 OS Version iOS 8 0 2 12A405 Report Version 105
  • Oracle 使用 Join 更新查询

    我正在尝试使用 Join 更新金额 但出现异常 UPDATE tab1 SET tab1 total adjusted cost tab1 total adjusted cost t1 total FROM table1 tab1 SELE
  • 从 iframe 中获取 iframe 的 URL 参数

    我有一个在网页上加载的 iframe 但我没有访问父页面的权限 我可以访问 iframe 的代码 我想访问此 iframe 的参数之一 实现这一目标的最佳方法是什么 我尝试了 location search 但它没有给我所有参数 有什么建议
  • 数据库优先使用桥表,如何将其排除在模型之外

    我试图找出如何制作一个桥接表实体 用于多对多关系 对我的模型透明 我正在使用EF数据库优先 有问题的表 简化 Report ReportId INT PK ReportName VARCHAR 50 Group GroupId INT PK