我有三张桌子
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。
答案 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.Persons
或someEvent.Companies
),您还可以轻松获取与特定人员或公司相关联的事件。