Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#实体框架核心如何创建linq查询模板通用函数_C#_Linq_Asp.net Core_Entity Framework Core - Fatal编程技术网

C#实体框架核心如何创建linq查询模板通用函数

C#实体框架核心如何创建linq查询模板通用函数,c#,linq,asp.net-core,entity-framework-core,C#,Linq,Asp.net Core,Entity Framework Core,我有一个简单的一对多模型:一本书可以有许多图书类别, 代码片段1/2-模型: public class Book { public int BookId { get; set; } [Required] public string Title { get; set; } public ICollection<BookCategory> BookCategories { get; set; } } public class Category {

我有一个简单的一对多模型:一本书可以有许多图书类别, 代码片段1/2-模型:

    public class Book
{
    public int BookId { get; set; }

    [Required]
    public string Title { get; set; }
    public ICollection<BookCategory> BookCategories { get; set; }
}
public class Category
{
    public int CategoryId { get; set; }
    public string CategoryName { get; set; }

}
public class BookCategory
{
    public int BookId { get; set; }
    public Book Book { get; set; }
    public int CategoryId { get; set; } 
}
该函数可以定位book对象的数据库表,然后定位Id列并查找book对象(或其他类的对象),然后使用查找表(类别)和映射表(BookCategories)更新值。 因此,问题归结为如何动态定位对象的数据库表及其主键,然后使用它组合linq查询来执行CRUD


谢谢。

回答您的问题,是的,您想做的是可能的,但是需要做很多工作。您的体系结构到底有多远?您回去进行更改有多容易(著名的最后一句话),这样您就有了控制器、接口、服务、存储库等,可以接受通用模型并为您完成工作?@SimonPrice谢谢,我实际上在寻找一个简单的解决方案。如果有很多工作,我会坚持现在的工作。不要因为很多工作或一些重复工作而惊慌失措,因为从长远来看,这可能会对你更有利。回答你的问题,是的,你想做的是可能的,但是这需要很多工作。您的体系结构到底有多远?您回去进行更改有多容易(著名的最后一句话),这样您就有了控制器、接口、服务、存储库等,可以接受通用模型并为您完成工作?@SimonPrice谢谢,我实际上在寻找一个简单的解决方案。如果有很多工作,我会坚持现在的工作。不要因为很多工作或一些重复工作而惊慌失措,因为从长远来看,这对你来说可能会更好
        public async Task<IActionResult> Book(int? id, Book book, List<int> bookCategoryIds)
    {
        id = id ?? 0;
        if (id != book.BookId)      
        {
            return NotFound();
        }

        var category = _context.Categories;
        if (ModelState.IsValid)
        {

            // if create a new book
            if (id == 0)
            {               
                _context.Add(book);

            }
            else    // existing book
            {
                _context.Update(book);

                var bookCategories = await _context.BookCategories.Where(bc => bc.BookId == book.BookId).ToListAsync();

                if (bookCategories != null && bookCategories.Count > 0)
                {
                    _context.BookCategories.RemoveRange(bookCategories);
                }

            }

            if (bookCategoryIds.Count > 0)
            {
                var cats = await _context.Categories.ToListAsync();
                foreach (Category c in cats)
                {
                    if (bookCategoryIds.Contains(c.CategoryId))
                    {
                        _context.BookCategories.Add(new BookCategory() { BookId = book.BookId, CategoryId = c.CategoryId });
                    }
                }

            }

            await _context.SaveChangesAsync();

            return RedirectToAction(nameof(Index));
        }
        return View(book);
    }
public static Task SaveMappingData<T>(DbContext _context, int id, T object, T lookupTable, T mappingTable  )
{
    var lookup = _context.lookupTable;  

            // if create a new object
            if (id == 0)
            {   // dynamically find the object table
                _context.ObjectTableName.Add(object);

            }
            else    // existing object
            {
                _context.ObjectTableName.Update(object);

                var mappingDataList = await _context.mappingTable.Where(bc => bc.MappingTableId== object.objectId).ToListAsync();

                if (mappingDataList != null && mappingDataList .Count > 0)
                {
                    _context.MappingTable.RemoveRange(mappingDataList );
                }

            }
    //more code ...

}
SaveMappingData(_context, id, book, bookCategoryIds, Categories, BookCategories);