C# 从多个表添加到视图模型
我有两个表,C# 从多个表添加到视图模型,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我有两个表,tblUsers和tblChat 特布卢斯 [Id] INT IDENTITY (1, 1) NOT NULL, [FirstName] NVARCHAR (50) NULL, [LastName] NVARCHAR (50) NULL, [EmailAddress] NVARCHAR (100) NULL, [Username] NVARCHAR (50) NULL, [Password] NVARCHA
tblUsers
和tblChat
特布卢斯
[Id] INT IDENTITY (1, 1) NOT NULL,
[FirstName] NVARCHAR (50) NULL,
[LastName] NVARCHAR (50) NULL,
[EmailAddress] NVARCHAR (100) NULL,
[Username] NVARCHAR (50) NULL,
[Password] NVARCHAR (50) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
tblChat
[Id] INT IDENTITY (1, 1) NOT NULL,
[From] NVARCHAR (50) NULL,
[To] NVARCHAR (50) NULL,
[Message] NVARCHAR (MAX) NULL,
[DateSent] DATETIME2 (7) NULL,
[Read] BIT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
我也有各自的DTO:
用户数据
[Table("tblUsers")]
public class UserDTO
{
[Key]
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string EmailAddress { get; set; }
public string Username { get; set; }
public string Password { get; set; }
}
查特托
[Table("tblChat")]
public class ChatDTO
{
[Key]
public int Id { get; set; }
public string From { get; set; }
public string To { get; set; }
public string Message { get; set; }
public DateTime DateSent { get; set; }
public bool Read { get; set; }
[ForeignKey("From")]
public virtual UserDTO FromUsers { get; set; }
[ForeignKey("To")]
public virtual UserDTO ToUsers { get; set; }
}
我还有一个聊天视图模型
,用于检索tblChat
表中的所有行,如下所示:
public class ChatVM
{
public ChatVM()
{
}
public ChatVM(ChatDTO row)
{
Id = row.Id;
From = row.From;
To = row.To;
Message = row.Message;
DateSent = row.DateSent;
Read = row.Read;
}
public int Id { get; set; }
public string From { get; set; }
public string To { get; set; }
public string Message { get; set; }
public DateTime DateSent { get; set; }
public bool Read { get; set; }
}
问题是,ChatVM
还不够,我需要基于users
表的更多属性
from
属性是users
表中的uniqye用户名,我需要ChatVM
中的另外3个属性,它们包含from
的id、名称和姓氏
基本上类似于以下内容(它经过修改ChatVM
)
你应该用like
public class alldata
{
public IEnumerable<tbl_chat> chatdata { get; set; }
public IEnumerable<tbl_user> chatdata { get; set; }
}
公共类所有数据
{
公共IEnumerable chatdata{get;set;}
公共IEnumerable chatdata{get;set;}
}
因此,UserDTO和ChatDTO实体之间有一个“1-1”连接,每个ChatDTO对象都通过Users和Touser的外键引用了2个UserDTO对象。您的ChatVM构造函数接受一个ChatDTO对象作为输入,所以如果您使用外键属性来访问UserDTO类的其他属性,会怎么样
e、 g
假设您的外键实际上实现了表之间的连接,那么通过它们您可以完全访问主类。这与问题有什么关系?!!
public class alldata
{
public IEnumerable<tbl_chat> chatdata { get; set; }
public IEnumerable<tbl_user> chatdata { get; set; }
}
FromId = row.FromUsers.Id; //Also you can check if FromUsers property is null to avoid exceptions
FromFirstName = row.FromUsers.FirstName ;
FromLastName = row.FromUsers.LastName ;