您能否告诉我在下述问题中应该做些什么?
我有一个班级" 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; }
}
}
答案 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