【问题标题】:Table relation and query Entity Framework表关系和查询实体框架
【发布时间】:2015-10-16 11:53:05
【问题描述】:
  • 父表AspNetUser -> 子表Ad
  • 父表Ad -> 子表Mobile Ad
  • 父表Ad -> 子表AdsLocation(针对一个广告的多个位置)
  • 父表City -> 子表PopularPlace

问题:

  1. 我应该在Mobile AdMobile 之间添加关系吗? (Mobile实体不应该在删除MobileAd时被删除,并且Mobile表中不应该有重复的行)

  2. 我应该添加AdsLocationCityPopularPlace 的关系吗?

  3. 根据companyName(移动表)编写查询以获取广告,并应检索 userName、title、price、companyName、modelName 和多个具有 cityName 和 PopularPlaceName 的位置(简而言之,从每个位置检索一列table :) 方法语法应该是首选。

【问题讨论】:

    标签: asp.net database entity-framework ado.net entity-framework-5


    【解决方案1】:

    1) 是的,您应该在移动广告和移动广告之间建立关系,因为移动广告引用移动 ID。

    2) 是的,您应该在 AdsLocation 和 City 之间创建关系,因为 AdsLocation 引用的是城市 ID。

    3) 在第 1 部分中的关系没有形成之前,这个查询是不可能的。但是,在尝试为这个问题编写 LINQ 查询时,我意识到您的数据库存在一些设计问题。例如,不同公司可以发布同一个广告吗?目前你的设计允许它。您的设计还允许任何用户为任何公司发布广告。在现实世界中,应该只有 X 公司的营销团队才能为 X 公司制作广告。我认为您应该花更多时间来审查这个设计!

    【讨论】:

    • 谢谢,但 Mobile 实体不应在删除 MobileAd 时被删除,并且 Mobile 表中不应有重复的行。所以初级对外关系不合适。
    • 你为什么要搞初级对外关系? MobileAd 有一个简单的移动外键。在当前的设计中,我会想象在创建 MobileAd 之前创建 Ad 和 Mobile。
    • 是的 广告和手机是在创建 MobileAd 之前创建的。我应该使用什么关系?
    • 如果你先做数据库,使用外键约束。如果您使用 Code First,那么您将需要共享您的模型。
    • 不一样。您仅在移动设备上创建主键,并在移动广告表中创建外键。当您删除移动广告时,它不会删除移动广告。但是,当您删除移动设备时,您可以在外键上指定设置(在删除级联时),这将自动删除移动广告。
    猜你喜欢
    • 2011-11-13
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多