为什么实体框架不允许我做.FindBy ....()

时间:2009-12-11 03:44:22

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

我使用我的数据库创建了一个EDM,并看到它能够建立像

这样的关系
Customers.First().Orders

没有像

那样的东西
Customer.First().Orders.FindOrderByOrderID()

Customer.First().Orders.FindOrderByOrderName()

也许我期待它就像那样,这就是它无法运作的方式 我可能只需要LINQ to实体并创建处理业务逻辑的管理器。

或LINQ to SQL会这样做吗?

3 个答案:

答案 0 :(得分:2)

您可以将LINQ与Orders属性一起使用,如下所示:

var order = Customer.First().Orders.FirstOrDefault(o => o.OrderId == someId);

如果没有匹配的Order,则返回null。

答案 1 :(得分:0)

使用LINQ to Entities,您可以执行此操作。比如上面发布的示例SLaks。

如果您喜欢冒险,可以编写一个功能来执行此操作。由于实体框架知道哪个列是主键,因此可以编写像GetEntityByPrimaryKey这样的函数。

CodeProject有article regarding the repository pattern,如果你搜索“SelectByKey”,你会看到它们的实现。我使用类似的东西,发现它非常有帮助。

答案 2 :(得分:0)

这个想法是你可以使用LINQ来编写更灵活的查询。但请注意,通过创建自己的动态类型(非简单),您可能会像.NET 4.0中的FindOrderByOrderName那样,通过自动构建LINQ查询来响应此模式之后的调用。当然,你失去了智能感知,我怀疑它是否值得,但它可以做到。