我是否需要为EF中的每个表创建一个类

时间:2014-02-14 00:50:06

标签: entity-framework c#-4.0 linq-to-entities

我想知道数据库中的每个表是否需要在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 个答案:

答案 0 :(得分:1)

不,您不必拥有映射表的类。只需将导航属性添加到CustomerAddress类中,EF就会自行处理映射表。

如果您正在使用数据库第一种方法与上下文生成器,它将自动完成。如果您尝试自己创建实体,则可以找到有用的问题和接受的答案: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; }
}

FooBar之间存在1对多的关系。要获得具有相应Foo的{​​{1}}项,请使用Bar

Include

它会在SQL查询中添加适当的using(var ctx = new MyContext()) { var results = cts.Foos.Include("Bar").Single(x => x.Id == 10); }

要使用JOINBar获取特定Foo项,事情会变得有点棘手,但您仍然无需明确添加Name LIKE '%something%'

Join

EF很聪明地知道,访问using(var ctx = new MyContext()) { var results = cts.Bar .Select(b => new { Bar = b, Foos = b.Foos.Where(f => f.Name.Contains("Something")) }) .ToList(); } 需要添加b.Foos