[英]why my data is add in two tables instead of one table in Asp.net mvc
我有两个类,分别是Good和Category。但是我有一个很奇怪的问题。 实际上,当我将表单提交给控制器以添加良好的实体时。一条记录添加了好消息,一条记录添加了类别,但是我不想在类别中添加任何数据。 我的控制器得到三个参数良好的实体和HttpPostedFileBase file, IEnumerable<HttpPostedFileBase> files
public class Good
{
public Good()
{
Images = new List<ImageList>();
Category = new Category();
}
[Key]
public int ProductId { get; set; }
[Display(Name = "نام کالا")]
public string Name { get; set; }
[Display(Name = "نام تصویر")]
public string ImageName { get; set; }
public string LargeImageName { get; set; }
[Display(Name = "نام لاتین")]
public string EnglishName { get; set; }
[Display(Name = "قیمت")]
public string Price { get; set; }
[AllowHtml]
[Display(Name = "توضیح مختصر")]
public string ShortDescription { get; set; }
[Display(Name = "کلمات کلیدی")]
public string Keyword { get; set; }
[Display(Name = "تعداد بازدید")]
public int PageVisit { get; set; }
[Display(Name = "وضعیت")]
public Boolean Status { get; set; }
//Fk
public int CategoryId { get; set; }
[ForeignKey("CategoryId")]
public Category Category { get; set; }
public virtual ICollection<ImageList> Images { get; set; }
}
===============
public class Category
{
[Key]
public int Id { get; set; }
[Display(Name = "نام مجموعه")]
public string CategoryName { get; set; }
[Display(Name = "نام انگلیسی مجموعه")]
public string EnglishName { get; set; }
//navigation
public virtual ICollection<Good> Good { get; set; }
}
============================
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ProductId,Name,ImageName,LargeImageName,EnglishName,Price,ShortDescription,Keyword,PageVisit,Status,CategoryId")] Good good, HttpPostedFileBase file, IEnumerable<HttpPostedFileBase> files)
{
if (ModelState.IsValid)
{
if (file != null)
{
if (file.ContentLength > 0)
{
var versions = new Dictionary<string, string>();
var checkSizeImage = ImageBuilder.Current.LoadImageInfo(file, null);
var setting = new ResizeSettings
{
MaxWidth = 600,
MaxHeight = 300,
Format = "jpg,png"
};
var path = Server.MapPath("/UploadFiles/Images/GoodGallery/");
versions.Add("_small", "maxwidth=270&maxheight=180&format=jpg");
versions.Add("_large", "maxwidth=600&maxheight=400&format=jpg");
foreach (var suffix in versions.Keys)
{
file.InputStream.Seek(0, System.IO.SeekOrigin.Begin);
ImageBuilder.Current.Build(new ImageJob(file.InputStream, path + file.FileName + suffix, new Instructions(versions[suffix]), false, true));
}
//good. = DateTime.Now.ToString();
var dotPosition = file.FileName.IndexOf('.');
var largeFileName = file.FileName.Insert(dotPosition, ".jpg_large");
var fileName = file.FileName.Insert(dotPosition, ".jpg_small");
good.LargeImageName = largeFileName;
good.ImageName = fileName;
}
}
else
{
good.LargeImageName = "No_Image.png";
good.ImageName = "No_Image.png";
}
if (files != null)
{
foreach (var file2 in files)
{
if (file2 != null && file2.ContentLength > 0)
{
var versions = new Dictionary<string, string>();
var path = Server.MapPath("/UploadFiles/Images/GoodGallery/");
versions.Add("_small", "maxwidth=270&maxheight=180&format=jpg");
versions.Add("_large", "maxwidth=600&maxheight=400&format=jpg");
foreach (var suffix in versions.Keys)
{
file2.InputStream.Seek(0, System.IO.SeekOrigin.Begin);
ImageBuilder.Current.Build(new ImageJob(file2.InputStream, path + file2.FileName + suffix, new Instructions(versions[suffix]), false, true));
}
var dotPosition = file2.FileName.IndexOf('.');
var largeFileName = file2.FileName.Insert(dotPosition, ".jpg_large");
var smallfileName = file2.FileName.Insert(dotPosition, ".jpg_small");
good.Images.Add(new ImageList { LargeImageName = largeFileName, SmallImageName = smallfileName });
}
}
}
else
{
good.Images.Add(new ImageList { LargeImageName = "No_Image.png", SmallImageName = "No_Image.png" });
}
ViewBag.Message = "فایل با موفقیت آپلود شد.";
}
db.Goods.Add(good);
db.SaveChanges();
ViewBag.CategoryId = new SelectList(db.Categories, "Id", "CategoryName", good.CategoryId);
return View(good);
}
这是因为您有Category = new Category();
在您的Good
类构造函数中。
由于Good拥有一个名为category的属性,并且您已经实现了这样的category类,并且制作了一个外键,这就是为什么。以不同的方式实现或在实体框架中实现外键就是这样-如果您不希望插入行,你应该停止前钥匙
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.