在我的控制器中,我創建了一個子類別對象,併爲該對象提供了它所屬類別的引用。一切工作正常,當我調試網站,但是當我從我的實體框架數據庫加載對象的列表中刪除所有類別的對象引用。其餘的依然存在。有人知道爲什麼發生這種情況?在實體框架中沒有正確保存對象引用
控制器:
[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'? –