[英]ASP.NET MVC3 and Entity Framework- one-to-many relationship in one view
[英]Entity Framework with ASP.NET returning null for one-to-many collection
我正在尝试与以下对象建立一对多关系。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Data.Common;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
namespace Program.Models
{
public class Log
{
public int ID { get; set; }
public string Source { get; set; }
public string Title { get; set; }
public DateTime Timestamp { get; set; }
public ICollection<Category> Categories { get; set; }
public Log()
{
this.Categories = new List<Category>();
}
}
public class Category
{
public int ID { get; set; }
public string Key { get; set; }
public string Value { get; set; }
}
public class LogDBContext : DbContext
{
public DbSet<Log> Logs { get; set; }
public DbSet<Category> Categories {get; set;}
public LogDBContext(DbContextOptions<LogDBContext> options) : base(options)
{
}
public LogDBContext() : base()
{
}
}
}
在启动时,我将以下实体放入数据库中
var cat1 = new Category { Key = "seed", Value = "seed" };
var cat2 = new Category { Key = "seed2", Value = "seed2" };
var log = new Log {
Source = "seed",
Timestamp = DateTime.Now,
Title = "seed" };
log.Categories.Add(cat1);
log.Categories.Add(cat2);
context.Logs.Add(log);
context.SaveChanges();
我通过调用函数来获取所有实体:
[HttpGet]
[Route("getAll")]
public IEnumerable<Log> GetAll()
{
return _context.Logs.Include(c => c.Categories).AsEnumerable();
}
我曾尝试将virtual
关键字放在类别的集合中(在Log类中),但是无论我尝试什么,我都会从服务器获取categories
null
。
[{"id":0,"source":"seed","title":"seed","timestamp":"2018-03-19T13:21:27.0034628","categories":null}]
任何帮助将不胜感激。
编辑:
根据反馈,我为Log
创建了一个构造函数,用于初始化ICollection。
public Log()
{
this.Categories = new List<Category>();
}
现在,不是null
,而是一个空列表[{"id":0,"source":"seed","title":"seed","timestamp":"2018-03-19T13:21:27.0034628","categories":[]}]
朝正确方向迈出的一步,但还没有完成。
编辑:为澄清起见,我使用的是EF-Core 2.0.2编辑:另外,我使用的是.NET Core 2.05
“解决方案”:我将我的项目切换为在完整的.Net Framework中使用Asp.net,它似乎可以正常工作。 我不知道为什么它拒绝使用带有.net核心的asp.net。
问题是您的一对多关系配置不正确。 编写模型类,如下所示:
public class Log
{
public Log()
{
this.Categories = new List<Category>();
}
public int ID { get; set; }
public string Source { get; set; }
public string Title { get; set; }
public DateTime Timestamp { get; set; }
public ICollection<Category> Categories { get; set; }
}
public class Category
{
public int ID { get; set; }
[ForeignKey("Log")]
public int LogID { get; set;}
public string Key { get; set; }
public string Value { get; set; }
public Log Log {get; set;}
}
希望能解决您的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.