2017-02-16 5 views
0

У меня есть Book, и каждая книга может иметь несколько Chapter. Каждый из Chapter имеет один аудиофайл. Как я могу обновить одну строку суб-сущности главы?обновление одного столбца Stub Entity в asp.net mvc

Это моя модель:

public class Book 
{ 
    public Book() 
    { 
     this.Chapters = new List<Chapter>(); 
    } 
    [Key] 
    public Int64 ISBN { get; set; } 

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int BookID { get; set; } 


    public string bookName { get; set; } 

    public string bookAuthor { get; set; } 

    [DataType(DataType.Currency)] 
    public decimal bookPrice { get; set; } 

    public virtual ICollection<Chapter> Chapters { get; set; } 
} 

public class Chapter 
{ 
    public int ChapterId { get; set; } 

    public string chapterName { get; set; } 


    [ForeignKey("Book")] 
    public Int64 ISBN { get; set; } 
    public virtual Book Book { get; set; } 
} 

В Создать ActionResult добавить новый Chapter путем создания нового объекта из главы модели и добавить его с помощью book.Chapters.Add()

for (int i = 1; i < Request.Files.Count; i++) 
{ 
    var mfile = Request.Files[i]; 

    if (mfile != null && mfile.ContentLength > 0) 
    { 
     var fileName = Path.GetFileNameWithoutExtension(mfile.FileName); 
     Chapter _bChapter = new Chapter() 
     { 
      chapterName = fileName, 
      chapterLink = BookDir + mfile.FileName 

    }; 
     book.Chapters.Add(_bChapter); 
     mfile.SaveAs(Server.MapPath(_bChapter.chapterLink)); 


    } 
} 

в Edit ActionResult я получаю новое аудио, используя HttpPostedFileBase

public ActionResult Edit(Book book, IEnumerable<HttpPostedFileBase> file) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Entry(book).State = EntityState.Modified; 

     //do some File operation to save audio in server folder 

     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    return View(book); 
} 

Но я не знаю, как сохранить новое загруженное аудио в главе суб объекта

+0

Как выглядеть ваш _chapter суб entity_? Можете ли вы описать больше того, чего вы хотите достичь? –

+0

@ m.wiśnicki я загружаю новый звуковой файл и загружаю его на свой хост, я хочу добавить путь к загруженному файлу в chapterName propery – AminM

ответ

1

Вы можете обновить Chapter, сначала найти соответствующую главу с помощью SingleOrDefault метода, следующего редактирования chapterName свойства и вызвать SaveChanges() метод, как это:

using (var context = new YourDbContext()) 
{ 
    var result = context.Chapter.SingleOrDefault(b => b.ISBN == book.ISBN); 
    if (result != null) 
    { 
     result.chapterName = @"/root/my/audios"; 
     context.SaveChanges(); 
    } 
} 

EDIT:

using (var context = new YourDbContext()) 
{ 
    var result = context.Chapter.Where(b => b.ISBN == book.ISBN).ToList(); 
    if (result.Any()) 
    { 
     foreach(var chapter in result) 
     { 
      chapter.chapterName = @"/root/my/audios"; 
     } 

     context.SaveChanges(); 
    } 
} 
+0

ОК, так что теперь, если у нас есть только 6 глава и обновление для пользователя, главы 2 и 5 – AminM

+0

Вы можете получить коллекцию где вы редактируете только эти 2 главы, при сохранении изменений в основном вы обновляете только эти 2 измененные главы. –

+0

еще раз спасибо, но, как я уже сказал, я получаю список новых файлов с HttpPostedFileBase. я должен прокручивать главы, а также HttpPostedFileBase, как я могу сделать это только с одним для каждого? – AminM