gpt4 book ai didi

mysql - 具有关系实体的 Entity Framework 原始 SQL

转载 作者:行者123 更新时间:2023-11-30 23:15:02 25 4
gpt4 key购买 nike

我最近开始使用 Entity Framework 试验原始 SQL,在某些情况下我更喜欢它。我想知道是否有一种方法可以获取关系实体:

不工作:

var personNo = context.Person.SqlQuery("SELECT * FROM `Person` LIMIT 1").FirstOrDefault();

foreach(var Number in personNo.Phone) {
//never iterates
}

有效(但在这种情况下我不想要 LINQ-to-Entities):

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

编写查询以接收电话号码列表的正确方法是什么?这可能吗?

最佳答案

您可以对实体执行 SQL。当我在其中有联接和分组依据但没有创建 View 的权限时,我更喜欢这种方式。

首先,创建一个类并添加与返回的列同名的属性。

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 年历史了。我什至没有意识到这一点。

关于mysql - 具有关系实体的 Entity Framework 原始 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18308164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com