代码之家  ›  专栏  ›  技术社区  ›  Ralph Shillington

EF4中“在模型中包含外键列”选项的优缺点是什么

  •  3
  • Ralph Shillington  · 技术社区  · 14 年前

    随着EF4出现了一个新特性“在模型中包含外键列”。添加此功能的动机是什么?在从现有数据库生成模型时,是否有关闭或打开此功能的特定方法?

    1 回复  |  直到 14 年前
        1
  •  2
  •   willbt    14 年前

    在不知道其真正动机的情况下,我认为当您通过Web服务或直接向表示层公开您的实体时,拥有这些附加列的价值就来了,顺便说一句,我个人并不这么做或推荐。

    请考虑以下示例。

    如果您没有外键属性,那么您的客户机代码如下所示。您很可能不想从数据存储中加载该类别的实例,因此您最终只创建了一个类别的新实例,该实例的ID设置仅代表FK关系。

            var product = new Product
            {
               Category = new Category {Id = 1},
               Name = "Product 1"
            };
    

    在实体框架的前一个版本中,它甚至更加混乱,最终得到了这样的代码。

            var product = new Product();
            product.Name = "Product 1";
            product.CategoryReference = new EntityReference<Category>();
            product.CategoryReference.SetEntityKey<Category>(1); 
    

    虽然这可能不纯粹,我个人认为这是更容易阅读,为客户较少的工作。

            var product = new Product
            {
                CategoryId = 1,
                Name = "Product 1"
            };
    

    赞成的意见

    为与您的实体一起工作的客户提供更简单的编码体验。

    欺骗

    从DDD的角度来看,在实体上具有两个属性并不完全是纯粹的。