BLToolkit协会Linq

时间:2011-08-17 19:34:50

标签: linq linq-to-sql orm associations bltoolkit

以下是从BLToolkit http://bltoolkit.net/(S(ibvuiu3itvirtq550l4r0n55))/Doc.LinqAssociations.ashx

中获取的列表关联的示例用法
[TableName("Categories")]

public class Category
    {
        [PrimaryKey, Identity] public int    CategoryID;
        [NotNull]              public string CategoryName;
                               public string Description;
                               public Binary Picture;

        [Association(ThisKey="CategoryID", OtherKey="CategoryID")]
        public List<Product> Products;
    }

AND

[TableName("Products")]

public abstract class Product
        {
            [PrimaryKey, Identity]                      public int      ProductID;
            [NotNull]                                   public string   ProductName;
                                                        public int?     SupplierID;
                                                        public int?     CategoryID;
                                                        public string   QuantityPerUnit;
                                                        public decimal? UnitPrice;
                                                        public short?   UnitsInStock;
                                                        public short?   UnitsOnOrder;
                                                        public short?   ReorderLevel;
            [MapField(IsInheritanceDiscriminator=true)] public bool     Discontinued;

            [Association(ThisKey="ProductID",  OtherKey="ProductID")]
            public List<OrderDetail> OrderDetails;

            [Association(ThisKey="CategoryID", OtherKey="CategoryID", CanBeNull=false)]
            public Category Category;

            [Association(ThisKey="SupplierID", OtherKey="SupplierID", CanBeNull=false)]
            public Supplier Supplier;
        }

当我尝试

using (var db = new NorthwindDB())
        {
            var query =
                from p in db.Product
                select new
                {
                    p.Category.CategoryName,
                    p.ProductName
                };

            foreach (var item in query)
            {
                Console.WriteLine(item);
            }
        }

返回产品CategoryName

但是当我尝试这种方式时(如linq2Sql)

  var db1 = new NorthwindDB();
  db1.Product.First().Category.CategoryName;

类别返回null ????

1 个答案:

答案 0 :(得分:0)

试试这个

var db1 = new NorthwindDB(); 
db1.Product.Select(prod => prod.Category.CategoryName).First();

我认为这样做也是如此。 无论如何关于“喜欢linq2Sql”,L2S有延迟加载,Blt没有