如何从Database.SqlQuery获取具有非原始参数的对象?

时间:2017-08-15 10:33:48

标签: c# asp.net asp.net-mvc entity-framework ef-code-first

您能否告诉我在下述问题中应该做些什么?

我有一个班级" Car"与数据库表映射(使用EF代码优先)和它只有原始对象参数

我还有第二堂课#34;用户"也用我的数据库表映射,这个类也有对象参数Car。

请您告诉我,如何从DB中获取第一个对象,用于以下代码EF?

DbContext.Database.SqlQuery<User>("dbo.GetFirstUser")

我的功能dbo.GetFirstUser

SELECT UserID, FirstName, SecondName, CarID FROM dbo.User

当我尝试获取它时,我的查询仅使用原始参数返回对象,对象Car始终为null

我将感谢您的建议。

感谢。

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace TestTimerConsole
{
    [Table("Car", Schema = "usr")]
    class Car
    {
        [Key]
        public int CarID    { get; private set; }
        public string Name  { get; private set; }
    }
}

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace TestTimerConsole
{
    [Table("User", Schema = "usr")]
    class User
    {
        [Key]
        public int UserID           { get; private set; }
        public string FirstName     { get; private set; }
        public string SecondName    { get; private set; }
        [ForeignKey("Car")]
        public int CarID            { get; private set; }
        public Car Car              { get; private set; }
    }
}

1 个答案:

答案 0 :(得分:0)

您目前只选择CarId。您需要从数据库中选择Car对象。有几种方法可以做到这一点。

实施例

using (var context = new DbContext())
{
    var query = from u in context.Users
                join c in context.Car on u.CarId equals c.CarId
                select new User 
                {
                    UserId = u.UserId,
                    FirstName = u.FirstName,
                    LastName = u.LastName,
                    Car = new Car()
                    { CarId = c.CarId, Name = c.Name } 
                }
}

使用存储过程选择User后,选择Car

User user = DbContext.Database.SqlQuery<User>("dbo.GetFirstUser");
Car car = DbContext.User.FirstOrDefault(x => x.CarId == user.CarId); //or create a stored proc if you want.

我认为您甚至可以更新存储过程以返回所有内容。 您必须确保属性正确映射。

因此,将存储过程更改为以下内容:

SELECT UserID, FirstName, SecondName, CarID, c.Name as [Car.Name]
FROM dbo.User u
INNER JOIN dbo.Car c on u.CarId = c.CarId