具有关系实体的实体框架Raw SQL

时间:2013-08-19 07:06:46

标签: mysql entity-framework

我最近开始使用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

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

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岁。我甚至没有意识到这一点。