实体框架对我来说并不是什么新鲜事,但是随着我继续扩展我的数据模型,这一点令人困惑。我试图创建一个具有另一个类的数组的类。 A类或County.cs有一个B类或Product.cs列表
我似乎无法以这样的方式创建这些类:当您要求context.counties时,您还会获得附加到它的产品数组。
A类或County.cs
public class County
{
[Key]
public int ID { get; set; }
public String Name { get; set; }
public List<Product> Products { get; set; } = new List<Product>();
[NotMapped]
public DateTime firstAppearance {
get {
var data = (from obj in Products orderby obj.Date descending select obj.Date).FirstOrDefault();
if (this.softwareIn)
{
return data;
}
else
{
var date = new DateTime(1,1,1);
return date;
}
}
set {
this.firstAppearance = value;
}
}
[NotMapped]
public bool softwareIn {
get {
return Products.Count() >= 1;
}
set {
this.softwareIn = value;
}
}
}
B类或Product.cs
public class Product
{
[Key]
public int ID { get; set; }
public String Name { get; set; }
public DateTime Date { get; set; }
[NotMapped]
public DateTime DateUtc {
get {
return getUtcDate();
}
set {
this.DateUtc = value;
}
}
public DateTime getUtcDate() {
return this.Date.ToUniversalTime();
}
}
我只是不理解并且没有在实体框架中创建足够的1:M关系。为什么我不能做这样的事情并让它一直工作?我第一次运行这个,我得到了我期望的数据类型,xx县有一个产品。但是,如果我删除所有这些并且只返回context.counties,那么我在product数组中什么也得不到。
[Route("Counties")]
public object GetCounties() {
var data = new County() {
Name = "xxx",
};
data.Products.Add(new Product() { Name="Cool Software", Date = DateTime.Now});
db.Counties.Add(data);
db.SaveChanges();
var da = db.Counties.ToList();
return db.Counties;
}
答案 0 :(得分:2)
您遇到此问题的原因是未正确配置外键。看一下你的数据库并查看外键。要使Entity Framework正确理解关系,您必须将相关实体标记为virtual
。所以这样做:
public virtual List<Product> Products { get; set;}
然后在您的Product
课程中将导航属性添加回父County
:
public virtual County County { get; set;}
我发现本教程非常好:
希望这有帮助。