我想知道数据库中的每个表是否需要在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
答案 0 :(得分:1)
不,您不必拥有映射表的类。只需将导航属性添加到Customer
和Address
类中,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; }
}
Foo
和Bar
之间存在1对多的关系。要获得具有相应Foo
的{{1}}项,请使用Bar
:
Include
它会在SQL查询中添加适当的using(var ctx = new MyContext())
{
var results = cts.Foos.Include("Bar").Single(x => x.Id == 10);
}
。
要使用JOIN
项Bar
获取特定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
。