EF6 Code First多对多,无集合

杰拉尔德

因此,我在EF中具有以下模型:

public class User: IEntity
{
    public Guid Id { get; protected set; }
    public string Email { get; protected set; }
    internal User()
    {
    }

    public User(Guid id, string email)
    {
        Id = id;
        Email = email;
    }
}

public class Tenant : IEntity
{
    public Guid Id { get; protected set; }
    public string Name { get; protected set; }

    internal Tenant() { }

    public Tenant(Guid id, string name)
    {
        Id = id;
        Name = name;
    }
}

我想在这些实体之间建立多对多关系,而不必在其中包含集合。

我试过创建一个连接实体,如:

public class TenantUser
{
    public int Id { get; set; }
    public virtual Tenant Tenant { get; set; }
    public virtual User User { get; set; }

    internal TenantUser ()
    {
    }

    public TenantUser(Tenant tenant, User user )
    {
        this.Tenant = tenant;
        this.User = user;
    }
}

使用以下设置:

modelBuilder.Entity<TenantUser>()
   .HasRequired<Tenant>(m => m.Tenant)
   .WithMany();

modelBuilder.Entity<TenantUser>()
   .HasRequired<User>(m => m.User)
   .WithMany();

当我保存TenantUser对象时,将使用正确的外键填充数据库。当我查询TenantUser DbSet中的所有行时,它返回所有行,但是我只填充了Id值,Tenant和User均为空。

我尝试将TenantId和UserId字段添加到TenantUser,然后对这些字段执行HasForeignKey,但这没什么区别;在查询中填充了TenantId和UserId,但Tenant和User仍然为空。

我觉得这里缺少一些简单的东西。任何想法都会很棒:)

斯里宾

如果要多对多,请删除配置:

modelBuilder.Entity<TenantUser>()
.HasRequired<Tenant>(m => m.Tenant)
.WithMany();

modelBuilder.Entity<TenantUser>()
.HasRequired<User>(m => m.User)
.WithMany();

为什么?由于EF使用协议:

public class User: IEntity
{
    public Guid Id { get; protected set; }
}

public class Tenant : IEntity
{
    public Guid Id { get; protected set; }
}

public class TenantUser
{
    public int Id { get; set; }
    public virtual Tenant Tenant { get; set; }
    public virtual User User { get; set; }
}

这是多对多流利的。

进行查询时,请使用:

public class UnitOfWork : DbContext
{
    public IDbSet<User> Users { get; set; }
    public IDbSet<Tenant> Tenants { get; set; }
    public IDbSet<TenantUser> TenantUsers { get; set; }
}

context.TenantUsers.Include(e => e.Tenant).Include(e => e.User);

然后EF将它们包括在映射中

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

EF6 Code First预生成的C#视图

来自分类Dev

Code First EF6是否无法检索内部对象?

来自分类Dev

EF6多对多插入

来自分类Dev

如何在EF6 Code First中创建与枚举对应的表?

来自分类Dev

EF6 Code First drop tables (not entire database) when model changes

来自分类Dev

如何使用EF6 Code First创建和使用视图?

来自分类Dev

如何在EF6 Code First中更新虚拟属性?

来自分类Dev

EF6 Code First和通过注释进行映射,如何构建配置?

来自分类Dev

如何使用EF6 Code First创建和使用视图?

来自分类Dev

如何在EF6 Code First中更新虚拟属性?

来自分类Dev

如何使用EF6 Code First将外键属性公开给具有导航属性的现有实体

来自分类Dev

使用Ef6 Code First在ASP MVC5中扩展默认ApplicationDbContext的简单方法

来自分类Dev

WPF中的EF6 Code First在应用程序文件夹中创建本地数据库

来自分类Dev

如何使用EF6更新多对多表格

来自分类Dev

带有代码优先EF6的多租户

来自分类Dev

在EF6中添加多对多视图

来自分类Dev

删除与EF6有多对多关系的实体记录

来自分类Dev

EF6未在多对多上填充属性

来自分类Dev

带有代码优先EF6的多租户

来自分类Dev

删除与EF6有多对多关系的实体记录

来自分类Dev

EF6 多对多关系,多表连接表

来自分类Dev

EF6加载相关集合成员的属性

来自分类Dev

EF6包括实体中集合的引用

来自分类Dev

EF6 延迟加载:添加时加载整个集合?

来自分类Dev

更新 EF6 中的实体子集合

来自分类Dev

EF6多对多更改保存但不创建ChangeTracker条目

来自分类Dev

从EF6中的多对多联接表返回一列

来自分类Dev

从EF6中的多对多联接表返回一列

来自分类Dev

EF Code一对多

Related 相关文章

热门标签

归档