ASP.NET Entity Framework 查询数据表多个"s"的解决方法。

解决方法:在查询的模型类的类名上方加上Table属性。例如你想查询Artist的数据,那么加[Table("Artist")]完毕。

不求甚解者,可以离开了,想深入了解,请继续浏览。

案例回顾:就拿Artist来说事吧

(1)数据库中已经存在数据表Artist,如图1.1

图1.1


(2)模型类Artist如图2.1

图2.1


(3)模型类与数据表的对应关系如图3.1

图3.1


(4)访问Artist数据的语句如图4.1

如图4.1


(5)打断点跟踪到这里发现SQL 语句是这样的:

SELECT 
[Extent1].[ArtistId] AS [ArtistId], 
[Extent1].[Name] AS [Name]
FROM [dbo].[Artists] AS [Extent1]

(6)明显感觉到不对,我的数据库中从未创建过Artists表。倒是有Artist,继续执行,看到报错了,说没有这个表


(7)再到数据库中确认一下,的确没有。


(8)那么这个表怎么来的呢?为什么会在我的表名基础上莫名其妙的多加了一个"s"呢?先来解决问题,再来分析问题。在模型类Artist的类名称上方加上[Table("Artist")]属性。再次跟踪运行,发现数据表没有了"s",如图8.1

图8.1


语句如下所示:

SELECT 
[Extent1].[ArtistId] AS [ArtistId], 
[Extent1].[Name] AS [Name]
FROM [dbo].[Artist] AS [Extent1]

到数据库中再次执行,没有问题。


(9)执行也是正常通过的。如图9.1

图9.1



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.NET Core MVC 进行多表查询,可以使用 Entity Framework Core 来实现。 首先,定义好每个表的实体类,并通过 DbContext 来建立它们之间的关系。例如,在一个订单管理系统,一个订单可能对应多个订单项,而一个订单项又对应一个商品,可以定义以下实体类: ```csharp public class Order { public int Id { get; set; } public DateTime OrderDate { get; set; } public ICollection<OrderItem> OrderItems { get; set; } } public class OrderItem { public int Id { get; set; } public int OrderId { get; set; } public int ProductId { get; set; } public int Quantity { get; set; } public decimal Price { get; set; } public Order Order { get; set; } public Product Product { get; set; } } public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } public ICollection<OrderItem> OrderItems { get; set; } } public class OrderContext : DbContext { public DbSet<Order> Orders { get; set; } public DbSet<OrderItem> OrderItems { get; set; } public DbSet<Product> Products { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<OrderItem>() .HasOne(p => p.Order) .WithMany(p => p.OrderItems) .HasForeignKey(p => p.OrderId); modelBuilder.Entity<OrderItem>() .HasOne(p => p.Product) .WithMany(p => p.OrderItems) .HasForeignKey(p => p.ProductId); } } ``` 然后,在查询时,可以通过 Include 方法来加载关联的实体类,并通过 Where 方法进行筛选。例如,查询订单商品名称为 "iPhone" 的订单项: ```csharp using Microsoft.EntityFrameworkCore; var orderContext = new OrderContext(); var orderItems = await orderContext.OrderItems .Include(p => p.Order) .Include(p => p.Product) .Where(p => p.Product.Name == "iPhone") .ToListAsync(); ``` 这样就可以得到所有符合条件的订单项,并且它们的关联实体类也已经加载好了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值