C# 实体框架核心:获取行时的循环引用

C# 实体框架核心:获取行时的循环引用,c#,.net,asp.net-core,.net-core,entity-framework-core,C#,.net,Asp.net Core,.net Core,Entity Framework Core,我有两张桌子: public class Book { public Guid Id { get; set; } public Library Library { get; set; } } public class Library { public Guid Id { get; set; } public ICollection<Book> Books { get; set; } } 我只想获取具有其库的书籍和具有books属性为null的实体l

我有两张桌子:

public class Book
{
    public Guid Id { get; set; }
    public Library Library { get; set; }
}

public class Library
{
    public Guid Id { get; set; }
    public ICollection<Book> Books { get; set; }
}
我只想获取具有其库的书籍和具有books属性为null的实体library。但我在图书馆的每本书上都有这个属性,当我想更新一本书时,总是抛出异常:

无法跟踪实体类型“Book”的实例,因为另一个 已跟踪具有{'Id'}相同键值的实例

是否有任何方法可以将所有具有Library属性books的书籍作为空值

有没有办法拿到图书馆所有的书 作为空值

如果这是您唯一的要求,那么请使用类似于-

var books=\u context.books
.选择(p=>新书
{
Id=p.Id,
库=新库{Id=p.Library.Id}
}).ToList();

如果你的模型中有很多属性,你可能想考虑为你做投影,比如-< /P>

var books=Mapper.ProjectTo(_context.books.ToList();
您将只需要使用所需的属性定义DTO模型,如-

public class BookDTO
{
公共int Id{get;set;}
公共图书馆到图书馆{get;set;}
}
公共图书馆
{
公共int Id{get;set;}
}
并定义它们的映射-

CreateMap();
CreateMap();

请添加ef生成的sql“那么当我想更新一本书时”-请共享该更新操作的代码。@atiyar\u context.Books.update(book);请不要在评论部分共享代码。编辑您的帖子并添加完整的操作,包括
book
的来源(例如方法参数)。这不是循环引用吗?
_context.Books.Include(b => b.Library).ToList();