2014-02-14 60 views
0

我想知道是否每个表都将在一个数据库中需要在EF中有一个类表示?我是否需要为EF中的每个表创建一个类

例如:

我有一个客户表,我有一个表的类。

我有一个地址表,我有一个表的类。

我有一个Customer_Address_Mapping表,它有两列。一个是customerid,另一个是addressid。所以很显然,这张表将顾客与他们的地址联系起来fk关系已到位。

那么,我必须在EF中为这个表创建一个类吗?

我敢肯定,在某些时候我会写一个LINQ查询,将查询客户表,并获得地址所说的客户加入到Customer_Address_Mapping表....

我也是必须有一个类表示要在LINQ连接中使用的Customer_Address_Mapping表,还是有一种方法/ EF是否为我做了那么繁重的工作......如果是的话,那么这个话题/主题是什么,因为我需要对自己进行教育。

TIA


对于别人谁遇到这种MarcinJuraszek教育了我关于我发现这是一个伟大的跟进课导航属性之后。

http://blog.staticvoid.co.nz/2012/7/17/entity_framework-navigation_property_basics_with_code_first

回答

1

不,你不必有映射表类。只需将导航属性添加到CustomerAddress类中,EF将负责映射表本身。

如果您使用上下文生成器使用DB优先方法,它将自动完成。如果你想自己创建你的实体,你可以找到这个问题,并接受有用的答案:MVC4 Entity Framework many-to-many custom join table name and schema name。这是关于oracle的,但同样适用于其他提供者。

更新

考虑以下POCO实体:

public class Foo 
{ 
    [Key] 
    public int Id { get; set; } 

    public string Name { get; set; } 

    public Bar Bar { get; set; } 
} 

public class Bar 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public ICollection<Foo> Foos { get; set; } 
} 

有1至FooBar之间一对多的关系。要获得Foo项目与相应的Bar您使用Include

using(var ctx = new MyContext()) 
{ 
    var results = cts.Foos.Include("Bar").Single(x => x.Id == 10); 
} 

将加适量JOIN到SQL查询。

要与Foo项目获得特别Bar实例与事情变得更靠谱,但你仍然不需要添加Join明确:

using(var ctx = new MyContext()) 
{ 
    var results = cts.Bar 
        .Select(b => new { Bar = b, Foos = b.Foos.Where(f => f.Name.Contains("Something")) }) 
        .ToList(); 
} 

EF是足够聪明,知道,在访问b.Foos要求添加JOIN

+0

那么我的加入怎么看呢?看到我前几天问过这个问题,我想我写得太差了(我对这个EF的东西很陌生),它没有得到太多的关注。无论如何,我需要引用连接中的映射表吗?所以问题在这里:http://stackoverflow.com/questions/21748609/linq-join-to-mapping-table-with-ef – GPGVM

+0

你根本不加入。您只需使用导航属性,EF会自动向生成的SQL查询中引入“JOIN”。 – MarcinJuraszek

相关问题