实体框架多表关系

时间:2015-12-30 06:45:49

标签: c# sql-server entity-framework asp.net-mvc-4

我有三张桌子

EVENT - PERSON - COMPANY

我需要使用这些表来建立多对多的关系。一个事件可以有一个或多个"客户",可以是个人或公司。通常,不使用ORM,使用sql,它将类似于:

EVENT
----
id
name

CLIENTEVENT
-----------
id 
clientid
clienttype -- person or company


PERSON
-----------
id 
name
lastname
...


COMPANY
-------
id
name

如何使用实体框架复制此方法?我很高兴使用EF,所以我很感激你能给我的所有帮助。我正在使用存储库模式,遵循这种方法http://www.codeproject.com/Articles/838097/CRUD-Operations-Using-the-Generic-Repository-Pat

2 个答案:

答案 0 :(得分:0)

我建议你而不是clientid和clienttype再做两列:personID和companyID。模型看起来会这样:

public class Event     
{
    public int ID { get; set; }
    public string name { get; set; }

    public virtual ICollection<CLIENTEVENT> links { get; set; }
}

public class Company
{
    public int ID { get; set; }
    public string name { get; set; }

    public virtual ICollection<CLIENTEVENT> links { get; set; }
}

public class PERSON
{
    public int ID { get; set; }
    public string name { get; set; }
    public string lastname { get; set; }

    public virtual ICollection<CLIENTEVENT> links { get; set; }
}

public class CLIENTEVENT
{
    public int ID { get; set; }

    public virtual PERSON person { get; set; }
    public int? personID { get; set; }

    public virtual Company company { get; set; }
    public int? companyID { get; set; }

    public virtual Event event1 { get; set; }
    public int? event1ID { get; set; }
}

答案 1 :(得分:0)

使用EF Code First,您不必处理像ClientEvent这样的表连接。你可以简单地写一下:

public class Event     
{
    public int Id { get; set; }

    public string Name { get; set; }

    public virtual ICollection<Company> Companies { get; set; }

    public virtual ICollection<Person> Persons { get; set; }
}

public class Company
{
    public int Id { get; set; }

    public string Name { get; set; }

    public virtual ICollection<Event> Events { get; set; }
}

public class Person
{
    public int ID { get; set; }

    public string Name { get; set; }

    public string Lastname { get; set; }

    public virtual ICollection<Event> Events { get; set; }
}

尝试此代码,您将看到EF创建两个链接表(EventPerson和EventCompany)。现在,客户类型是您阅读的集合(someEvent.PersonssomeEvent.Companies),您还可以轻松获取与特定人员或公司相关联的事件。

About many-to-many with EF