【问题标题】:EF4.1 Model DesignEF4.1 模型设计
【发布时间】:2012-01-06 07:37:19
【问题描述】:

EF 代码优先 - 模型

我有 2 节课:

public class Alias
{
    public int id { set; get; }
    public string Name { set; get; }
    public ICollection<Tweet> Tweets { set; get; }
}

public class Tweet
{
   public int id {set;get;}
   public Alias Author { set; get; }
}

它在 Tweet 类中创建一个 Author_Id (FK)。好的有道理,因为它有两个模型之间的关系。但是它为什么不在 Alias 类中创建 Tweet_Id (FK) 呢?还是因为我正在使用 ICollection?为什么它在 Tweet 类中创建 FK 而反之则不然?

什么关键字告诉 EF 在其模型中创建 FK

我也试过下面的代码,但它失败了......

public class Alias
{
    public int id { set; get; }
    public string Name { set; get; }
    public Tweet Tweets { set; get; }
}

public class Tweet
{
   public int id {set;get;}
   public Alias Author { set; get; }
}

我想了解模型的工作原理、创建 FK 的方式和时间? ...请给我一个简短的解释...提前谢谢你!

【问题讨论】:

  • 你在做Entity Framework Code First,对吧?
  • 这是关系数据库的核心知识,所以如果你不理解这些概念,你应该停止使用 EF 并尝试学习一些有关关系数据库的知识。如果至少对关系概念有基本的了解,您将无法正确使用 EF。

标签: entity-framework-4 ef-code-first


【解决方案1】:

SQL 不需要两个表上的外键。没有 C# 中的方向概念。

Tweet 表需要一个 id 来说明它连接到哪个别名。从中您可以很容易地查询由该别名发布的所有推文。

如果 Alias 表中有 Tweet_Id,那么一旦同一个人发布了第二条推文,将设置为什么?

【讨论】:

  • 谢谢大卫,你的回答很有意义,因为它是 1..many。但是如果我有 1 比 0..1 谁会拥有 FK 呢?您如何选择包含 FK 的模型?如果您还可以提供一个示例示例,说明如何编写基于(1 到 0..1)的模型,那将非常有帮助...再次感谢
  • 0..1:我不太确定它会如何映射。我得试试看。从技术上讲,我认为您可以将外键放在任何一端。在 SQL 中,在 Alias 表中创建一个可为空的 Tweet_Id 可能更明确,但我对 EF 的了解还不够充分,无法说出它会做什么。我可以试着举个例子,但我不能保证它很快就会成为现实……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多