2017-11-16 6 views
0

私は2つのクラスを持っています。それらは名前がGoodでCategory.butです。実際には、良いentity.oneレコードを追加するために私のフォームをコントローラに提出すると、レコードを追加して1つのレコードをカテゴリに追加しますが、カテゴリにデータを追加したくありません。私のコントローラは、3つの引数良いエンティティを取得し、HttpPostedFileBase file, IEnumerable<HttpPostedFileBase> files私のデータがAsp.net MVCの1つのテーブルの代わりに2つのテーブルに追加される理由

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); 

    } 

答えて

1

あなたGoodクラスのコンストラクタにCategory = new Category();を持っているためです。

+0

通過することができ、デザインを確認してください。」私のプロジェクトの別の部分でそれを解決する方法。 –

+0

その場所でカテゴリオブジェクトを作成する必要があります。必要なときにのみオブジェクトを作成します。この場合、プロジェクトの別の部分に明示的にカテゴリオブジェクトを作成する必要があります。 – Sid

1

グッドとしてはcategoryというプロパティがあり、そのようなカテゴリクラスをすでに実装していますし、外部キーを作りました。なぜなら、異なる方法で実装するか、エンティティフレームワークの外部キーの実装がそういうものです。行の、あなたはforiegnキー

を停止する必要があり、私はit.Iがオブジェクト参照がオブジェクトのインスタンスに設定されていませんれます削除した場合、あなたがhttps://samsaffron.com/archive/2012/01/16/that-annoying-insert-problem-getting-data-into-the-db-using-dapper

+0

私はそれを削除します。オブジェクトのインスタンスにオブジェクト参照が設定されません。私のプロジェクトの別の部分でそれを解決する方法。 –

関連する問題