首先在 EF 4.1 代码中映射关联表

2023-11-27

我不确定如何映射下面的表格EF 4.1 code first以及我需要哪些对象来代表表格。我如何检索产品规格列表?

我目前只有一个Product class.

Products Table:
Id
Name
IsActive

ProductSpecification Table:
ProductId
SpecificationId

Specifications Table:
Id
Name
IsActive

ProductSpecifications是一个关联表。我还在上下文类中定义了以下内容:

public DbSet<Product> Products { get; set; }

EDIT

请参阅我更新的原始帖子。我更改了产品和规格表的 ID。

在我的上下文类中,我有以下内容:

public DbSet<Product> Products { get; set; }
public DbSet<Specification> Specifications { get; set; }

在我的存储库中,我有以下内容:

public Product GetById(int id)
{
     return db.Products
          .Include("Specifications")
          .SingleOrDefault(x => x.Id == id);
}

My Product class(部分的):

public class Product : IEntity
{
     public int Id { get; set; }
     public string Name { get; set; }
     public bool IsActive { get; set; }
     public ICollection<Specification> Specifications { get; set; }
}

My Specification class:

public class Specification : IEntity
{
     public int Id { get; set; }
     public string Name { get; set; }
     public bool IsActive { get; set; }
     public ICollection<Product> Products { get; set; }
}

这就是我从 Slauma 的回答中所做的一切。我没有像他说的那样手动进行映射,但我首先需要了解以下内容:

鉴于上面的类和表,EF 4.1 命名约定对于如何处理关联表究竟有何规定?我之所以问这个问题是因为我在 GetById 方法中收到以下错误:

Invalid object name 'dbo.SpecificationProducts'.

EDIT 2

我忘记提及以下内容:) 产品可以将规格高度作为值。对于这个高度,我需要指定一个值。比如100英寸。因此,我修改了 ProductSpecifications 表,使其具有一个名为的值列SpecificationValue,此列将包含值 100 英寸。我将如何修改代码来检索该值?我需要将其显示在我的视图中。


在多对多关系中,您仅为要关联的实体定义类,而不是关联表的实体。该表“隐藏”在您的模型中,并由实体框架自动管理。所以你可以定义这些类:

public class Product
{
    public int ProductId { get; set; }
    public string Name { get; set; }

    public ICollection<Specification> Specifications { get; set; }
}

public class Specification
{
    public int SpecificationId { get; set; }
    public string Name { get; set; }

    public ICollection<Product> Products { get; set; }
}

这通常足以定义多对多关系。 EF 将从该映射创建一个连接表。如果数据库中已经有这样的表,并且其命名不完全遵循实体框架的命名约定,您可以在 Fluent API 中手动定义映射:

modelBuilder.Entity<Product>()
    .HasMany(p => p.Specifications)
    .WithMany(s => s.Products)
    .Map(c =>
        {
            c.MapLeftKey("ProductId");
            c.MapRightKey("SpecificationId");
            c.ToTable("ProductSpecification");
        });

Edit

然后,您可以使用以下方式加载产品的规格Include例如:

var productWithSpecifications = context.Products
    .Include(p => p.Specifications)
    .SingleOrDefault(p => p.ProductId == givenProductId);

这会将产品与规格一起加载。如果您只需要给定产品 ID 的规格,您可以使用以下内容:

var specificationsOfProduct = context.Products
    .Where(p => p.ProductId == givenProductId)
    .Select(p => p.Specifications)
    .SingleOrDefault();

...它返回规范的集合。

Edit 2

EF Code-First 的命名约定将假定连接表的名称由两个相关类名称的组合构建,然后将其复数化。因此,没有明确映射到您的表名ProductSpecificationEF 会假设ProductSpecifications(复数)并使用该名称作为表名构建查询。因为数据库中不存在该表,所以您会得到异常“对象名称“dbo.SpecificationProducts”无效。" 当您运行查询时。因此,您必须重命名数据库中的表或使用上面的映射代码。

Edit 3

我强烈建议在任何情况下都使用显式映射,因为连接表名称为阿萨姆语取决于上下文中 DbSet 的顺序。通过改变这些集合的顺序,连接表可以是SpecificationProducts。如果没有显式映射到固定表名称,则上下文中的集合交换(通常不重要)可能会破坏您的工作应用程序。

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

首先在 EF 4.1 代码中映射关联表 的相关文章

  • 将 F# 类型保存到数据库

    A lot http gorodinski com blog 2013 02 17 domain driven design with fsharp and eventstore f 文章数推荐 http fsharpforfunandpr
  • 为什么 EF Core 使用此存储过程总是返回 -1?

    我正在尝试对本地 2016 DB 使用 EF Core 最新版本 并且我得到 1每次都回来 我不知道我做错了什么 我知道它正在到达数据库 我查了一下 int returnCode dbContext Database ExecuteSqlC
  • 使用实体框架从 2 个表返回数据

    我正在使用 MVC3 和实体框架 但我需要来自不同表的更多数据 通常我会做这样的事情来从表中获取数据 Table Users id username 在代码中我会做这样的事情来获取所有用户 public static IEnumerable
  • 从类型获取 DbSet

    我正在尝试为 MVC 6 应用程序制作通用表查看器 编辑器 我目前使用 Context GetEntityTypes 返回给我一份表格列表 现在我需要获取特定类型的数据 我当前的实现是 On my context public IQuery
  • 从客户端访问 DomainService 中的自定义对象

    我正在使用域服务从 Silverlight 客户端的数据库中获取数据 在DomainService1 cs中 我添加了以下内容 EnableClientAccess public class Product public int produ
  • 元数据集合中不存在标识为“ ”的成员。\r\n参数名称: Identity

    我在尝试调试时稍微简化了代码 HttpPost public ActionResult Register User model DateTime bla new DateTime 2012 12 12 try User user new U
  • EF6 不从数据库生成外键关联

    PROBLEM 我正在尝试使用数据库优先方法创建 EF6 模型 简单来说 我有2张桌子tblUser and tblMilkMan上有外键关系UserID柱子 但是当我创建一个新的 EDMX 图并添加 2 个表时 我看不到其中的关系 未创建
  • EntityHydrate 任务失败

    我最近安装了 Visual Studio 11 Beta 和 Visual Studio 2010 之后 我无法在 Visual Studio 2010 中构建依赖于 PostSharp 的项目 因此我卸载了 Visual Studio 1
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • 在实体框架中设置获取大小

    我正在将 ado net 代码转换为使用 EF 在我的 ado net 代码中我设置dataReader FetchSize command RowSize 1000与默认的获取大小相比 这极大 地提高了性能 当我将代码转换为 EF 时 性
  • 乐观并发:IsConcurrencyToken 和 RowVersion

    我正在创建将在我的应用程序中使用的默认并发策略 我决定采取乐观的策略 我的所有实体都映射为Table per Type TPT 使用继承 我很快了解到 在实体框架上使用带有继承的 RowVersion 类型的列时存在问题 Product I
  • Entity Framework Code First 是否允许在单独的文件中进行流畅的映射?

    我正在使用实体框架代码优先开发一个相当大的数据库模式 与数据注释方法相比 我更喜欢 Fluent API 因为它将我的域对象保留为简单的 POCO 为了使用 Fluent API 我必须在继承自 DbContext 的类中重写 OnMode
  • 实体框架代码首次日期字段创建

    我正在使用实体框架代码优先方法来创建我的数据库表 下面的代码 创建一个DATETIME数据库中的列 但我想创建一个DATE柱子 DataType DataType Date DisplayFormatAttribute ApplyForma
  • 为什么没有主键的表是一个坏主意?

    我对数据建模非常陌生 根据微软的实体框架 不允许使用没有主键的表 这显然是一个坏主意 我试图找出为什么这是一个坏主意 以及如何修复我的模型 这样我就不会出现这个漏洞 我当前的模型中有 4 个表 User City HelloCity 和 R
  • 有没有办法将所有内容都包含在 dbcontext 中?

    当查询一个DbContext急切加载时 需要Include Navigation 为了填充导航属性 然而 在某些情况下 我想简单地Include all实体的导航属性 有没有办法做到这一点 或者有办法做到这一点 我假设你可以反思 但我宁愿避
  • 无法将类型 System.Linq.IQueryable 隐式转换为字符串

    我有两个名为 Rank 和 CrewMembers 的表 我想根据 CrewMember 的 id 获取 Rank 表中存在的排名名称 我已将船员 ID 作为参数传递 并在此基础上该方法将返回该特定船员的等级 这就是我的代码 public
  • 如何使用 linq to sql 一次更新多行?

    Table id userid friendid name status 1 1 2 venkat false 2 1 3 sai true 3 1 4 arun false 4 1 5 arjun false 如果用户发送userid 1
  • EF 迁移迁移到 0 调用初始创建关闭

    我正在尝试找出将迁移降低到空数据库的语法 就像在初始创建迁移中调用 down 方法一样 有谁知道在迁移中调用 Down 方法的正确语法与此类似 Update Database StartupProjectName Infrastructur
  • 大表的最佳主键格式

    我正在开发一个 ASP NET 应用程序 它有一些可能很大的数据表 我想知道定义主键的最佳方法是什么 我知道以前已经有人问过这个问题 但由于这是针对特定情况的 所以我认为这个问题是有效的 我在 SQL Server 2008 数据库上使用实
  • 在实体框架中比较日期的最佳方法

    我在实体框架的 where 子句中使用日期并收到以下错误 这是由于以下代码 var entity dbContext MyTable Where w gt w PId 3 w CreatedOn Date mydate Date First

随机推荐

  • 如何使用sed删除某个范围内的Unicode?

    我想删除某个范围内的 Unicode 例如 echo abc 123 sed s uff21 uff3b g expect abc123 但得到 sed e表达式 1 字符20 无效范围结束 or use echo abc 123 sed
  • 如何在 Node.js 中使用相同的键设置多个 http 标头字段?

    我正在尝试设置使用 cloudflare 进行服务器推送 但它们需要多个link用于推送多个文件的标头字段 但是 我找不到任何记录的方法来在 node js 中包含具有相同键的多个标头字段 我尝试提供一个数组 但这只是将它们连接在一起作为单
  • 这种自由项变量错误(在宏展开时产生)可以避免吗?

    我正在开发 DSL 并且在扩展宏时遇到 自由术语 失败 我想知道是否可以避免 我把问题简化为以下情况 假设我们有这个表达式 val list join 0 1 2 3 println list 其中 join 是一个宏 其实现是 def j
  • 如何在 Repeater 项中找到选中的 RadioButton?

    我在 ASPX 页面上有一个 Repeater 控件 定义如下
  • 使用 Azure 在哪里存储用户图片等内容?斑点存储?

    我刚刚将我的一个测试用例项目迁移到微软的azure 但对于类似于头像上传的功能 我需要对硬盘上的文件进行写访问 但这是云 所以这是不可能的 我怎样才能构建这样的功能呢 我应该使用 Blob 存储还是有更好的解决方案 将所有网站图像 例如布局
  • 如何从 Firebase 实时数据库获取数据到 Flutter 列表中?

    我正在尝试使用模型将 Firebase 实时数据库中的数据检索到 Flutter 中的列表中 当我这样做时 我的列表返回为空 我已经阅读了其他几篇有关将 Firebase 与 Flutter 结合使用的文章 但尚未找到明确的答案 这是我当前
  • 标签下方的中心单选按钮

    假设我有一些单选按钮 其标签如下所示
  • Haskell:输入“导入”时解析错误

    我正在尝试重新创建输出这个哈斯克尔代码 forM flip mapM import Control Monad Cont main do forM 1 3 i gt do print i forM 7 9 j gt do print j w
  • 在表单中提交禁用的输入无法获取值

    形式如下
  • GTK# .NET 应用程序,无需单独安装 GTK#

    我在 Windows 上使用 MonoDevelop 开发 C 应用程序 发现我喜欢使用 GTK 而不是 winforms 然而 据我所知 到目前为止 您不能仅仅将 GTK 运行时嵌入到应用程序中 问题是我不想要求我正在开发的应用程序的最终
  • MySQL可以替换多个字符吗?

    我正在尝试替换 MySQL 字段中的一堆字符 我知道 REPLACE 函数 但它一次只能替换一个字符串 我看不到任何合适的功能在手册中 我可以一次替换或删除多个字符串吗 例如 我需要用破折号替换空格并删除其他标点符号 您可以链接 REPLA
  • 更新面板错误:在 UpdatePanel 中找不到 ID 为“xxx”的控件

    我有一个复合下拉日历用户控件 由文本框和日历图像以及验证控件组成 我在用户控件上公开了一个名为 TextBox 的属性 该属性返回对控件内使用的文本框的引用 这是用户输入日期的文本框 在 ASPX 页面中 我有一个此用户控件的实例
  • 传递可变参数模板参数的位置

    我想创建一个采用可变数量模板参数的函数 稍后 使用这些参数 函数应该像这样传递它们的位置 template
  • 长ID的性能

    我想知道这个问题已经有一段时间了 在 CouchDB 中 我们有一些相当日志的 ID 例如 000ab56cb24aef9b817ac98d55695c6a 现在 如果我们正在搜索该项目并浏览由视图创建的树结构 看起来一个简单的整数作为 i
  • 为什么派生类不能在此代码中调用受保护的成员函数?

    include
  • 线程和文件写入

    我有一个使用 20 个线程的 java 程序 他们每个人都将结果写入一个名为output txt 我总是得到不同数量的行output txt 会不会是线程同步的问题 有办法处理这个问题吗 难道是线程同步的问题 Yes 有办法处理这个吗 是的
  • 如何构建使用 CMake FetchContent 下载的外部库?

    我有一个依赖于外部库 例如 SDL 的程序 我希望 CMake 为我处理这种依赖性 所以我正在研究FetchContent 据我了解 该模块只是下载源代码 以便可以在以下位置获得有关外部库的信息配置时间 例如 include FetchCo
  • SVN:发布分支和外部?

    我们有两个针对同一客户的网站 主 www 网站和另一个位于单独服务器上的电子商务网站 它们使用共享的代码部分 各种功能 样式 javascript 等 目前 我们通过将共享代码作为 SVN 中的单独项目 在同一存储库中 并使用 svn ex
  • Python3中如何设置文件权限?

    Python 自己的文档非常简洁地介绍了如何使用类似的函数os fchmod os chmod 我对这样的数字感到困惑777和类似的表达方式stat S IWRITE stat S IEXEC 是什么mode 0o777我在一些函数中看到o
  • 首先在 EF 4.1 代码中映射关联表

    我不确定如何映射下面的表格EF 4 1 code first以及我需要哪些对象来代表表格 我如何检索产品规格列表 我目前只有一个Product class Products Table Id Name IsActive ProductSpe