Я пытаюсь узнать о Entity Framework 6 и столкнулся с проблемой, которую мне удалось воспроизвести в тестовом проекте:
A Movie
имеет Name
иRevenue
.Revenue
имеет GrossIncome
:
public class Movie
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public Revenue Revenue { get; set; }
}
public class Revenue
{
[Key]
public int Id { get; set; }
public double GrossIncome { get; set; }
}
Я пытаюсь использовать код EF6 в первую очередь для сохранения некоторых данных о фильмах в базе данных:
public class MovieContext: DbContext
{
public MovieContext(): base("name=testDB") { }
public DbSet<Movie> Movies { get; set; }
public DbSet<Revenue> Revenues { get; set; }
}
Я начинаю свставка нового фильма со связанным доходом в БД:
using (var context = new MovieContext())
{
Revenue revenue = new Revenue()
{
GrossIncome = 10
};
Movie movie = new Movie()
{
Name = "foo",
Revenue = revenue
};
context.Movies.Add(movie);
context.SaveChanges();
}
В SQL Server видно, что таблицы созданы и столбец Movies.Revenue_Id
создан с отношением внешнего ключа.на Revenue.Id
.
Если я попытаюсь выполнить запрос с использованием SQL, он будет работать нормально:
SELECT Movies.Name, Revenues.GrossIncome
FROM Movies
LEFT JOIN Revenues ON Movies.Revenue_Id = Revenues.Id
вернет
Name GrossIncome
----------------------
foo 10
Однако, если я попытаюсь использоватьEntity Framework для запроса данных:
using (var context = new MovieContext())
{
List<Movie> movieList = context.Movies.ToList();
Console.WriteLine("Movie Name: " + movieList[0].Name);
if (movieList[0].Revenue == null)
{
Console.WriteLine("Revenue is null!");
}
else
{
Console.WriteLine(movieList[0].Revenue.GrossIncome);
}
Console.ReadLine();
}
Консоль читает:
Movie Name: foo <- It shows that the query works, and that the data in the main table is fetched.
Revenue is null! <- Even though the data in the DB is correct, EF does not read the data from the foreign key.
Мой вопрос прост: что я делаю не так?Как считывать значения внешнего ключа?