我要填寫以下實體模型:如何使用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