在我的控制器中,我创建了一个子类别对象,并为该对象提供了它所属类别的引用。一切工作正常,当我调试网站,但是当我从我的实体框架数据库加载对象的列表中删除所有类别的对象引用。其余的依然存在。有人知道为什么发生这种情况?在实体框架中没有正确保存对象引用
控制器:
[Authorize(Roles = "administrator")]
[HttpPost]
public ActionResult Create(CategoryViewModel viewmodel, HttpPostedFileBase Icon)
{
SubCategory subcategory = new SubCategory();
Category category = categorycontroller.getCategoryByName(viewmodel.SelectedValue);
viewmodel.subcategory.Category = category;
subcategory = viewmodel.subcategory;
category.Subcategories.Add(subcategory);
if (Icon != null && Icon.ContentLength > 0)
{
var fileName = Path.GetFileName(Icon.FileName);
var path = Path.Combine(Server.MapPath("../../Content/icons/"), fileName);
Icon.SaveAs(path);
subcategory.Icon = fileName;
}
if (ModelState.IsValid)
{
subcategorydb.categories.Attach(category);
subcategorydb.subcategories.Add(subcategory);
subcategorydb.SaveChanges();
return RedirectToAction("Index");
}
return View(subcategory);
}
,这是我的视图模型:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.Web.Mvc;
using SkyLearn.Areas.Categories.Controllers;
namespace SkyLearn.Areas.Categories.Models
{
public class CategoryViewModel
{
public List<SelectListItem> PossibleValues { get; set; }
public string SelectedValue { get; set; }
public SubCategory subcategory { get; set; }
public CategoryController categorycontroller;
public CategoryViewModel()
{
PossibleValues = new List<SelectListItem>();
}
}
}
这里是我的类别和子类别类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
namespace SkyLearn.Areas.Categories.Models
{
public class Category
{
public int ID { get; set; }
public string Title { get; set; }
public string Icon { get; set; }
public string Description { get; set; }
public List<SubCategory> Subcategories;
public Category()
{
Subcategories = new List<SubCategory>();
}
}
public class CategoryDBContext : DbContext
{
public DbSet<Category> categories { get; set; }
public DbSet<SubCategory> subcategories { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using SkyLearn.Areas.Categories.Controllers;
namespace SkyLearn.Areas.Categories.Models
{
public class SubCategory
{
public int ID { get; set; }
public string Title { get; set; }
public string Icon { get; set; }
public string Description { get; set; }
public int CategoryID { get; set; }
public Category Category { get; set; }
}
public class SubCategoryDBContext : DbContext
{
public DbSet<SubCategory> subcategories { get; set; }
public DbSet<Category> categories { get; set; }
}
}
我已经搜查了许多网站的信息这个问题,但无法找到很多的帮助。这里有人能够识别我的问题吗?
正如在截图中看到的那样,对象被一切手段正确引用。但是当我下次加载数据时,对象引用已经消失。所有其他属性仍然存在,并保存为他们应该:
感谢AronChan
////更新//// 现在我收到以下错误:
A foreign key value cannot be inserted because a corresponding primary key value does not exist. [ Foreign key constraint name = SubCategory_Category ]
你的两个对象关系是否消失?您似乎有双向关系:类别<-->子类别。你的数据库表看起来如何? –
是的,任何对象都没有参考。我不是自己构造表,因为我使用EntityFramework面向对象的数据库它为我自动完成所有的映射 – AronChan
Subcategory是否也有一个'CategoryId',如果是的话,如果你明确设置'subCategory.CategoryId = category会发生什么。 CategoryId'以及'subCategory.Category = category'? –