Я пытался следовать некоторым основным учебным пособиям по .Net, я хочу создать веб-API Asp.net Core, использующий EF Core.
В основном .Include (), похоже, ничего не делает, и я даже не думал, что сначала это будет необходимый вызов, если честно.
У меня есть API с Goldfish, которыйЕсли у вас есть идеи, JSON возвращается для отдельных объектов, за исключением того, что мое свойство навигации всегда имеет значение NULL для золотой рыбки:
[
{
"id": 1,
"name": "Bob",
"isAlive": true,
"food": 50,
"ideas": null
},..
Вот класс Goldfish (он также не работает для ICollection)
public class Goldfish
{
public long ID { get; set; }
public string Name { get; set; }
public bool IsAlive { get; set; }
public long Food { get; set; }
public IEnumerable<Idea> Ideas { get; set; }
}
А вот класс Idea (я использую атрибут Foreignkey из отчаяния, чтобы заставить его работать, ранее у меня было свойство GoldfishID.
public class Idea
{
public long ID { get; set; }
public string Title { get; set; }
public string Gist { get; set; }
public long GoldfishID { get; set; }
[ForeignKey("GoldfishID")]
public Goldfish Goldfish { get; set; }
}
Я думаю, что моя база данных в порядке,поскольку внешний ключ был настроен в моей таблице идей:
ALTER TABLE [dbo].[Ideas] WITH CHECK ADD CONSTRAINT
[FK_Ideas_Goldfish_GoldfishID] FOREIGN KEY([GoldfishID])
REFERENCES [dbo].[Goldfish] ([ID])
ON DELETE CASCADE
GO
Но когда я получаю доступ к своему методу контроллера:
[HttpGet]
public IEnumerable<Goldfish> GetAll()
{
var stuff = _context.Goldfish.Include(i => i.Ideas);
return stuff.ToList();
// return _context.Goldfish.ToList();
}
Благодаря моему любимому инструменту во всем мире, я знаю,SQL, который работает, не имеет ни объединения, ни каких-либо попыток получить идеи - моя золотая рыбка забита мозгом: (
SELECT [g].[ID], [g].[Food], [g].[IsAlive], [g].[Name]
FROM [Goldfish] AS [g]
Пожалуйста, дайте мне знать, где я ошибаюсь ... это мой тип возврата, исключая типструктурыя хочу?Я скажу, что я не настроил желаемое «один ко многим» явно в OnModelCreating, поскольку учебник этого не сделал, вот весь мой контекст:
public class GoldfishContext : DbContext
{
public GoldfishContext(DbContextOptions<GoldfishContext> options)
: base(options)
{
}
public DbSet<Goldfish> Goldfish { get; set; }
public DbSet<Idea> Ideas { get; set; }
//Interrupt the standard configuration of table names, the tutorial has this and it's nice to keep ffr
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Goldfish>().ToTable("Goldfish");
}
}
Я должен упомянуть!Я добавил эти идеи в мою DBInitialise, и они определенно существуют в БД:
var pondideas = new Idea[]
{
new Idea {Title="Bobs idea", Gist = "Give bob food", GoldfishID=1},
new Idea {Title="Bobs second idea", Gist = "Give bob more food", GoldfishID=1},
new Idea {Title="Nice idea", Gist = "Feed everyone", GoldfishID=1},
new Idea {Title="terrible idea", Gist = "Feed nobody", GoldfishID=1}
};