C# 带有附加字段的实体框架联接表

C# 带有附加字段的实体框架联接表,c#,entity-framework,C#,Entity Framework,实体框架最佳实践问题 我有一个Cases表和一个Users表,我希望以多对多的关系将它们连接起来。但是,我希望join本身使用“UserType”字段存储关于该关系的信息 在SQL中易于操作-两个主数据表和第三个数据表使用外键链接这两个表,并包含一个额外的UserType列 create table #user ( UserId int, Info nvarchar(4000) ) create table #case ( CaseId int, Info nvarchar(4000

实体框架最佳实践问题

我有一个Cases表和一个Users表,我希望以多对多的关系将它们连接起来。但是,我希望join本身使用“UserType”字段存储关于该关系的信息

在SQL中易于操作-两个主数据表和第三个数据表使用外键链接这两个表,并包含一个额外的UserType列

   create table #user ( UserId int, Info nvarchar(4000) )
   create table #case ( CaseId int, Info nvarchar(4000) )
   create table #jointable ( UserId int, CaseId int, UserType nvarchar(99))
让我困惑的是EF本身定义联接表的能力,这使它脱离了开发人员的控制。在这个例子中,我是否需要将这三个类都定义为EF类,或者是否有一种方法来构建这个类,我只定义两个类,Case和User,让EF在仍然获取我的UserType的情况下为我处理连接

我使用的是“代码优先”EF,这对解决方案没有多大影响

干杯,
Matt

EF只负责创建具有简单多对多关系的联接表。和您的情况一样,除了显式创建join类之外,我看不到任何其他方法

public class UserCase
{
     public virtual User User { get; set; }
     public virtual Case Case { get; set; }

     public virtual string UserType { get; set; }
}

使用EF实现这一点的唯一方法是创建两个
一对多
关系:

public class User
{
    public int UserId {get; set;}
    public string Info {get; set;}

    public virtual ICollection<UserCase> UserCase {get; set;}
}
public class Case
{
    public int CaseId {get; set;}
    public string Info {get; set;}

    public virtual ICollection<UserCase> UserCase {get; set;}
}
public class UserCase
{
    public int CaseId {get; set;}
    public int UserId {get; set;}

    public virtual Case Case {get; set;}
    public virtual User User {get; set;}

    public string UserType {get; set;}
}
公共类用户
{
public int UserId{get;set;}
公共字符串信息{get;set;}
公共虚拟ICollection用户案例{get;set;}
}
公开课案例
{
public int CaseId{get;set;}
公共字符串信息{get;set;}
公共虚拟ICollection用户案例{get;set;}
}
公共类用例
{
public int CaseId{get;set;}
public int UserId{get;set;}
公共虚拟案例案例{get;set;}
公共虚拟用户用户{get;set;}
公共字符串用户类型{get;set;}
}