EFCore,多对多,DB First,导航属性不起作用

时间:2017-05-28 20:10:37

标签: c# entity-framework entity-framework-core

我正在尝试映射到现有数据库。当我使用下面的代码并为给定实体提取结果列表时,我会得到我期望的结果。

但是,当我尝试将int abc() { int a = 5; while(a > 0) { a = a -1 // Decrement inside loop // Code } } 添加到针对.Include(x => x.Book)表的简单列表查询时,我的结果集将返回空。

UserBook

我按照此处列出的说明进行操作:http://www.learnentityframeworkcore.com/configuration/many-to-many-relationship-configuration

为了更好地说明问题,以下是我正在使用的查询:

[Table("User")]
public class User
{
    [Key]
    public Guid UserId { get; set; }
    public string UserName{ get; set; }

    // Reference
    public ICollection<UserBook> UserBooks { get; set; }
}

[Table("Book")]
public class Book
{
    [Key]
    public Guid BookId { get; set; }
    public string BookName{ get; set; }

    // Reference
    public ICollection<UserBook> UserBooks { get; set; }
}

[Table("UserBook")]
public class UserBook
{
    public Guid UserId { get; set; }
    public Guid BookId { get; set; }
    public int PermissionMask { get; set; }
    public bool Deleted { get; set; }

    // Ref
    public User User { get; set; }
    public Book Book { get; set; }
}

2 个答案:

答案 0 :(得分:1)

我认为EF会抱怨UserBook实体没有定义键,不知道你是如何让它工作的。但是为了使包含工作我相信你需要明确复合键。尝试将以下内容添加到DbContext课程中:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.Entity<UserBook>(e => e.HasKey(c => new { c.UserId, c.BookId }));
}

答案 1 :(得分:0)

您的映射表示不可为空的外键(因此EF将在查询中生成内部联接)。尝试将外键上的数据类型从Guid更改为Guid?然后再试一次。