关于EntityFramework和SQLite的一个问题。
当我使用SQL Server时,我想对一个表进行查询,我会很容易地访问所需的表(例如"Messages"),像这样:
_databaseDBContext.Messages.where(m => m.id == id);
但是在SQLite上,我不能通过简单地输入名称来访问表,而是使用Set<>()
方法,如下所示:
_SqliteDBContext.Set<Message>().where(m => m.id == id);
这让我想到如果我有两个这样的表会发生什么:
DbSet<Message> Messages { get; set; }
DbSet<Message> OtheTypes { get; set; }
我怎样才能正确地相互指示?
谢谢!
函数.Set<T>()
有一个重载方法,它接受一个表名;.Set<Message>(string name)
。因此,您可以使用它来区分两个表。
Where
子句示例:
var messages = _SqliteDBContext.Set<Message>("Messages").Where(x => x.id == 2);
var messages = _SqliteDBContext.Set<Message>("OtheTypes").Where(x => x.id == 2);
使用C# Query Language
和两个数据库表的示例:
var query = from message in _SqliteDBContext.Set<Message>("Messages")
join otherType in _SqliteDBContext.Set<Message>("OtheTypes") on messages.id equals otherType.id
select new { message, otherType};
EF Core只支持在每个实体类型的模型中有一个映射。也就是说,不支持两个相同类型的实例最终存储在不同的表或不同的列中的情况。
但是你可以做一个简单的技巧:
public class Messagetwo : Message
{
}
然后在上下文中
DbSet<Message> Messages { get; set; }
DbSet<Messagetwo> OtheTypes { get; set; }