实体框架连接表与附加字段

时间:2013-07-09 13:11:05

标签: c# entity-framework

实体框架的最佳实践问题。

我有一个Cases表和一个Users表,我希望以多对多的关系加入它们。但是,我希望连接本身能够将关于该关系的信息存储在“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,而不是那应该对解决方案产生很大影响。

干杯, 马特

2 个答案:

答案 0 :(得分:2)

EF只负责使用简单的多对多关系创建连接表。与您的情况一样,我没有看到任何其他方式,但显式创建连接类

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

     public virtual string UserType { get; set; }
}

答案 1 :(得分:0)

使用EF实现此目标的唯一方法是创建两个one-to-many关系:

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;}
}