我要填写以下实体模型:如何使用EF原始SQL查询和/或LinQ填充实体模型?
public class MyModel
{
public Abc Abc { get; set; }
public Def Def { get; set; }
public List<Ghi> Ghi { get; set; }
}
public class Abc
{
[Key]
public int ID { get; set; }
public string SomeString { get; set; }
}
public class Def
{
[Key]
public int ID { get; set; }
public string OtherString { get; set; }
}
public class Ghi
{
[Key]
public int ID { get; set; }
public int DefID { get; set; }
public string ThirdString { get; set; }
}
随着使用EF &一些原始的SQL查询数据:
using (var ctx = new ApplicationDbContext())
{
var abc = ctx.Database.SqlQuery<Abc>(@"SELECT Abc.* FROM XY INNER JOIN Abc ON XY.AbcID = Abc.ID").ToList();
var def = ctx.Database.SqlQuery<Def>(@"SELECT Def.* FROM XY INNER JOIN Def ON XY.DefID = Def.ID").ToList();
var ghi = ctx.Database.SqlQuery<Ghi>(@"SELECT Ghi.* FROM XY INNER JOIN Def ON XY.DefID = Def.ID INNER JOIN Ghi ON Def.ID = Ghi.DefID").ToList();
}
但我不能做这样的:
var myModel = new MyModel();
myModel.Abc = abc;
myModel.Def = Def;
myModel.Ghi = Ghi;
因为它会抛出我的错误,如
无法隐式转换类型 'System.Collections.Generic.List' 到 'MyProject.Models.Abc'
所以,问题是:
1)我如何转换列表模型或更好的直接填充模型,而不是使用原始SQL的列表?
2)我知道LinQ可以让事情变得更简单,用更少的代码来编写...我怎么用LinQ来做到这一点?
谢谢,张志贤!该死的,这很容易。我的第二个问题呢? – Tomo
@Tomo实际上,如果您使用EF,您应该能够将您的数据库结构映射到EF实体,然后使用它们代替普通的SQL查询。检查[本文](https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/database-first-development/creating-the-web-application)它显示了如何生成模型从现有的数据库。 –
我不想那样,我更喜欢手动编写它,而不需要实体数据模型向导附带的不必要的东西。我做插入没有原始的SQL,但从数据库获取数据我使用原始的SQL,但我应该使用LinQ来代替。 – Tomo