如果单个用户是多个国家/地区的成员,则如何构建数据库并为同一数据库创建API

时间:2019-01-28 13:32:46

标签: sql-server asp.net-mvc entity-framework join

我创建了一个应用程序,其中用户可以根据国家/地区的规范访问应用程序,并且单个用户可以是多个国家/地区的成员。 因此,我创建了两个表,一个用于用户的详细信息,另一个用于存储国家/地区表。

我尝试过的表格设计:-
1 st (Users table):- UserID (Primary Key), Name, EmailId, UserRole
2 nd (Country table) :- UserId (foreign key),CountryId (primary key), Country_name

我已经创建了ASP.NET MVC GETPOST api并且在单个Get Request (api/GetUser(id))中,我希望可以获取该用户的全部数据 通过在这两个表之间使用联接查询。

代码:-

public IQueryable<tblUserRecord> GettblUserRecords()
{
           var query = (from g in db.tblUserRecords
                         join u in db.tblCountryNames on g.UserId equals u.UserId
                         select new { g, u, });
            return query;
}

我遇到的问题/错误:-

  

严重性代码描述项目文件行抑制状态   错误CS0266无法隐式转换类型   'System.Linq.IQueryable <>'到   'System.Linq.IQueryable'。一个明确的   转换存在(您是否缺少演员表?)

为解决上述问题,我尝试将函数的返回类型更改为List<tblUserRecord>,也将return query更改为return query.toList()。但是什么都没有


注意:-在创建实体模型时,我选择了两个表。

1 个答案:

答案 0 :(得分:0)

如果要同时返回tblUserRecord模型和tblCountryName模型中的数据,则可以创建包装模型来保存此数据,并让您的方法返回该数据。可能看起来像:

public class UserAndCountry 
{
    public tblUserRecord UserRecord {get; set;}
    public tblCountryName CountryRecord {get; set;}
}

然后,查询数据的方法如下:

public IQueryable<UserAndCountry> GettblUserRecords()
{
   var query = (from g in db.tblUserRecords
                 join u in db.tblCountryNames on g.UserId equals u.UserId
                 select new UserAndCountry { UserRecord = g, CountryRecord = u });
   return query;
}

要详细说明您收到的错误,这并不是因为您提到的返回IQueryableList而引起的。之所以发生这种情况,是因为您要选择一个匿名对象来构建IQueryable,但是您的方法将返回类型定义为IQueryable<tblUserRecord>

还要注意,按照惯例,类名通常是.NET中的大写驼峰