Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.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# 数据库表的动态列,值为IdentityModel_C#_Asp.net_Asp.net Mvc_Entity Framework_Entity Framework 6 - Fatal编程技术网

C# 数据库表的动态列,值为IdentityModel

C# 数据库表的动态列,值为IdentityModel,c#,asp.net,asp.net-mvc,entity-framework,entity-framework-6,C#,Asp.net,Asp.net Mvc,Entity Framework,Entity Framework 6,我有这个模型: [Table("Book")] public class Book { [Key] public int BookID {get; set;} [Column("Title")] public string Title {get; set;} // The IsReaded column must store a Boolean value relative to the current (authorized) user. [N

我有这个模型:

[Table("Book")]
public class Book
{
    [Key]
    public int BookID {get; set;}
    [Column("Title")]
    public string Title {get; set;}

    // The IsReaded column must store a Boolean value relative to the current (authorized) user.
    [NotMapped]
    public bool IsReaded {get; set;}
}
关于我使用
IdentityModel
user.Identity.GetUserId()
函数收到的用户授权的数据

关于用户是否阅读过本书的数据如下表所示:

如果在这个表中有关于用户和他读的书的数据,这意味着他读了它

我找到了一种通过存储库实现这一点的方法,描述了GetBook方法,在该方法中,我将另外为IsReaded字段分配一个值。()

但在我的项目中,图书模型将被经常使用,在不同的地方我使用的方法是:跳过、取、何处和其他。 代码有点笨拙:

public Book GetBook(int booked){
    var book = db.Books.SingeOrDefault(x=>x.BookId==booked);
    book.IsReaded = db.Readers.Any(x=>x.BookId==booked && x.UserId == User.Identity.GetUserId());
    return book;
}

public Book GetBooks(){
    var books = db.Books.ToList();
    var results = new List<Book>();
    foreach(var item in books){ 
        var book = new Book();
        book.IsReaded = db.Readers.Any(x=>x.BookId== item.BookId && x.UserId == User.Identity.GetUserId());
        results.add(book);
    }
    return results.add;
}
通过模型中的辅助上下文创建对数据库的查询看起来非常好。但是它非常慢,并且不需要为每个模型创建额外的上下文

[NotMapped]
public book IsReaded {
    get {
    var activeUserId = HttpContext.Current.User.Identity.GetUserId();
    using (ContextDb db = new ContextDb())
    {
        if (activeUserId != null) 
        {
            return db.Readers.Any(x=>x.UserId == activeUserId && x.BookId==BookId)
        }
     }
   }
}

我不知道最好的,有用的建议是什么?如何做得更好?我在网上搜索,没有发现对我有用的东西。我希望能得到帮助

我在代码中没有看到任何提示动态列的内容。我所看到的是大量的数据库i/O,可以通过正确建模关系或将查询与正确使用联接相结合来压缩。@Igor基于标题很难理解需要什么,我无法在标题中更准确地描述它。阅读我的问题,你就会明白我需要什么:)@Igor更准确地说,我希望用户获得一个图书模型,该模型上也有一个关于阅读图书的标志。这与“喜欢”系统在社交网络中的实现非常相似,当你在照片或消息上打上“喜欢”标记后,“喜欢”将被标记。我明白了,你可以通过建立关系来实现这一点,特别是在
书籍
阅读器
实体之间建立导航关系。通过这样做,您可以在一个查询中检索所需的所有内容,而不是每本书一个查询。。另见
var query = bookRepo.GetBooks().Where(x => x.Title != "NO").OrderByDescending(x => x.Title);
var part = new BookParts()
{
   TotalItems = query.Count(),
   Books = query.Skip(5).Take(10).ToList()
};
[NotMapped]
public book IsReaded {
    get {
    var activeUserId = HttpContext.Current.User.Identity.GetUserId();
    using (ContextDb db = new ContextDb())
    {
        if (activeUserId != null) 
        {
            return db.Readers.Any(x=>x.UserId == activeUserId && x.BookId==BookId)
        }
     }
   }
}