我是否总是需要在 MVC ASP.NET 用户表上加入

本文关键字:用户 NET ASP MVC 是否 | 更新日期: 2023-09-27 18:35:46

我正在编写我的第一个 ASP.NET MVC应用程序。我正在从一堆表中检索用户数据,我需要确保只返回与当前经过身份验证的用户相关的数据。我发现自己在做很多重复的代码,特别是在我的 LINQ 查询中 - 我总是必须重新连接到 AspNetUser 的 ID 字段,所以我只获取当前经过身份验证的用户拥有的数据。除了每个用户都有自己的表之外,有没有一种好方法,这样我就可以编写 LINQ 查询,而不必添加条件,例如:

(from .... join ....
WHERE db.Users.ID == Customers.AccountOwnerID
select ...)

我的直觉告诉我,一定有更好的方法,但谷歌几乎没有出现。

谢谢托马斯

我是否总是需要在 MVC ASP.NET 用户表上加入

您可以通过根据需要创建包装类来做到这一点。请参阅斯科特的评论,这可能会回答您。(我无法链接到确切的评论,在页面上搜索关键字"已验证")

http://weblogs.asp.net/scottgu/linq-to-sql-part-8-executing-custom-sql-expressions

您不需要联接表即可具有如此简单的条件。当你加入 LINQ 时,你基本上是在做

选择。。。从表1 T1内部连接表2 T2在 T1 上。用户 ID = t2。用户标识

那么为什么不能只使用您的用户 ID 字段呢?

您可以将 UserID 作为表中的外键,这样就不需要将它们连接在一起。

将代码更改为:

(来自....

其中数据库。用户 ID == 客户帐户所有者 ID

选择...

如果您没有外键,最好拥有它。可以将其添加到数据库中的表中,也可以在"LINQ 数据对象模型"中添加外键

如果使用实体框架生成模型,则有一种更简单的方法。在实体模型中,可以以"关联"的名称在表之间创建关系。然后在代码中,您可以直接访问表,而无需与用户表中的 userID 列建立连接条件。

最终结果 LINQ 将如下所示:

    (from Customer.address 
    select ...)
其中,

地址是与客户表有关系的另一个表,其中客户是保存客户表中当前客户数据的对象。