【问题标题】:Working with a Read Only table without a primary key in Entity Framework在实体框架中使用没有主键的只读表
【发布时间】:2019-06-25 16:58:20
【问题描述】:

使用具有只读数据库和没有主键的表的客户端。我试图将一个表“项目”(有一个主要)与“图片”[无键]进行比较,以便从有图片的“项目”中获得结果。每个项目是否在“图片”中都有图片。我无法在 SQL 中编辑数据库本身。

我的最终目标是返回只有图片的结果。

我尝试使用原始 SQL 查询,然后将其转换为 IQueryable,但这不允许我使用其他参数搜索项目,而且速度非常慢。 (“item”表中可能有 75+ 列和 10,000+ 总项目)我只能弄清楚如何使用带有 'SELECT *' 的查询。

控制器:

entities db = new entities();

var results = (from s in db.items
                           select s);

...

var Pics = db.Database.SqlQuery<Item>(
"SELECT * FROM dbo.Pics
AS p JOIN dbo.item
AS i ON 
i.item = p.item
WHERE p.Pic = 'Yes'").AsQueryable(); 

...

results = Pics;

...

return View(results);

【问题讨论】:

  • 我不明白i.item = p.item。这是item表中item的主键和pics表中item的外键吗?
  • item 的主键。如果表格设计正确,它将是图片下项目的外键。但是我正在使用一个设计不正确的表,所以我认为它在技术上不是外键,尽管我试图这样对待它(两列的数据相同)
  • 所以应该非常简单地转换为 LINQ。也许我的SQL to Linq Recipe 可以帮到你?
  • 我的问题是我不确定如何在不使用 SQL 查询的情况下访问实体框架中的 Pics 表,因为它没有键。 Pics 表没有在我的 edmx 中编译。有没有办法将 LINQ 与不在模型中的表一起使用?
  • edmx文件是怎么生成的,导致Pics数据库或者Pics表不生成?是否使用 Visual Studio 和设计器视图生成?

标签: c# sql-server asp.net-mvc entity-framework linq


【解决方案1】:

试试这个

var results = from i in db.items
              join p in db.Pics
              on i.item equals p.item
              where p.Pic == "Yes"
              select i;

【讨论】:

  • 我无法让 Edmx 文件生成 Pics 表,因为它没有主键,所以 'db.Pics' 不起作用。这就是我的主要问题所在。
  • 是的,我现在明白了。它是否允许您创建多个列的复合键?
  • 就表和数据库而言,我无能为力。它们是完全只读的。我也许可以在我的应用程序中对它们做一些事情,但我不确定如何做。但是,当我从数据库更新模型时,该表没有显示在我的设计器中。
  • 您可以使用数据库中的 Code First 代替吗?
  • 一旦我转换为 Code First,解决方案就奏效了。因此,虽然我本可以自己找出您发布的答案,但我可能不会想到先转换为代码。非常感谢!
猜你喜欢
  • 2011-04-29
  • 1970-01-01
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
  • 2018-09-22
相关资源
最近更新 更多