c# - 没有外键的关联

标签 c# entity-framework-4 associations

我正在尝试关联 EF4 中的两个实体类型,但没有可用的外键。

我可以做任何手动调整吗,这样当我加载订单实例时,我会得到类似的内容:

order.orderID = 455
order.date = 2012-08-12
order.OrderItems = <List>OrderItem // OrderItem being the other entity I want to map on         order

我想当我 Select() 订单并设置其 OrderItems 属性时,我必须手动执行此操作,因为没有可用的 FK。

我走在正确的道路上吗?

**编辑:

我能够在订单和订单项目之间创建关联,这是我为订单使用的 Select() 方法:

    public Order Select(long orderID)
    {
        using (var ctx = new BillingSystemEntities())
        {
            var res = from n in ctx.Orders
                      where n.OrderID == orderID
                      select n;
                 if (res.Count() == 0)
                    return null;
                else
                    return  res.First();
         }
    }

根据 SQL Profiler,EF 未对 OrderItem 表执行任何 JOIN。我想我需要自己将它们加载到 OrderItems 导航属性中?

最佳答案

您只需在查询中包含 OrderItems:

public Order Select(long orderID)
{
    using (var ctx = new BillingSystemEntities())
    {
        var res = from n in ctx.Orders.Include("OrderItems")
                  where n.OrderID == orderID
                  select n;
        return res.FirstOrDefault();
    }
}

此外,FirstOrDefault 在这里比您的 Count()...First() 构造更合适,因为它在 Count()< 时仅访问数据库一次First() 将分别发出一个单独的查询。

您可以将其写得更紧凑:

public Order Select(long orderID)
{
    using (var ctx = new BillingSystemEntities())
    {
        return ctx.Orders.Include("OrderItems")
            .FirstOrDefault(n => n.OrderID == orderID);
    }
}

关于c# - 没有外键的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12098841/

相关文章:

php - 我们如何建立一个 laravel 多级关联

c# - C# 中小型数组与小型结构的访问时间

c# - WPF/Silverlight 风格分析器

.net - Entity Framework 逻辑实体错误

c# - EF Transactions C# MySQL 连接器

mysql - LINQ to Entities 不支持指定的类型成员 'DateTime'

c# - 如何上传 Excel 文件以及附加文件名的新 GUID?

c# - 从 .NET(特别是 Windows Phone 7)调用任意 JSON 服务器的最佳方法是什么

ruby-on-rails - 将foreign_key 值传递给Rails Controller 的更好方法

ruby-on-rails - Ruby on Rails-关联在“before_destroy”之前被删除