我最近开始使用Entity Framework尝试使用Raw SQL,在某些情况下我更喜欢它。 我想知道是否有办法抓住关系实体:
Dosnt work:
var personNo = context.Person.SqlQuery("SELECT * FROM `Person` LIMIT 1").FirstOrDefault();
foreach(var Number in personNo.Phone) {
//never iterates
}
工作(但在这种情况下我不想要的LINQ到实体):
var personNo = context.Person.FirstOrDefault();
foreach(var Number in personNo.Phone) {
//iterate twice as it contains in the db
}
我尝试了几个不同的查询,包括
SELECT * FROM `Person` LEFT JOIN `Phone` ON (`Person`.ID = `Phone`.PersonID) LIMIT 1
编写查询以获取电话号码列表的正确方法是什么?这可能吗?
答案 0 :(得分:0)
您可以对实体执行SQL。当我在其中加入和分组时,我更喜欢这种方式,并且没有创建视图的权限。
首先,创建一个类并添加与返回列名称相同的属性。
public class PersonWithAddress
{
public int Id { get; set; }
public String Name { get; set; }
public String Address { get; set; }
}
带参数的C#
MyEntity db = new MyEntity();
String sqlQuery = @"
SELECT Id, Name, Address
FROM Person p
JOIN Address a
ON a.Id = p.Id
WHERE Name = @Name
AND Address = @Address
";
String searchName = "Joe";
String address = "123 Something Lane";
DbRawSqlQuery<PersonWithAddress> results = db.Database.SqlQuery<PersonWithAddress>(
sqlQuery,
new SqlParameter("@Name", searchName),
new SqlParameter("@Address", address)
);
foreach(PersonWithAddress a in results)
{
}
您可以根据需要列出任意数量的参数 哇这个问题是2岁。我甚至没有意识到这一点。