【问题标题】:Model question in MVC3MVC3 中的模型问题
【发布时间】:2011-06-15 17:27:35
【问题描述】:

我有一个关于 MVC3 的基本问题。我开始为我的项目编写模型。我了解模型在某种程度上是我的关系数据库层中的表。如何将类属性(表中的字段)指定为 FK。我知道 PK 的 [Key] 限定符。例如:

 public class Class1
{
    [Key]
    public int MyID { get; set; }
    public string myDes {get;set;}

}

在上面的示例中,MyId 是 Class1 中的一个 PK。如何在另一个类中使用此 MyId 并将其用作 FK。

编辑:这是正确的吗?

public class Class2

{ [钥匙] 公共 int SecondID { 获取;放; }

[ForeignKey("MyId")]
public string MyId{ get; set; }

}

Class1 和 Class2 位于两个不同的 .cs 文件中。

【问题讨论】:

  • 你在用什么或/m?
  • @david : Nhibernate 是我们打算在未来使用的......现在,我才刚刚开始学习基础知识。现在,我想我正在使用 MVC3 中 VS 环境中构建的任何东西。

标签: database-design asp.net-mvc-3 class-design ef-code-first models


【解决方案1】:

存储关联记录的实例(或一对多或多对多关系的关联记录列表)。

public MyOtherObject MyObject { get; set; }

这可能会根据您将数据持久化到数据库的方式而改变,但通常这是 OO 方式。

我使用 EF 4.1 Code First 执行此操作,生成的数据库包含关联表的外键。


根据您的最新评论进行编辑(关于 ForeignKeyAttribute),以便我可以在答案中使用更好的代码格式:

根据 ForeignKeyAttribute (http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.foreignkeyattribute(v=vs.103).aspx#Y198) 的 MSDN 条目,您传递给 ForeignKeyAttribute 的名称是同一类上相应导航属性或外键属性的名称。 em>

例如:

public class MyClass
{
    // This is a "Navigation Property"
    public MyOtherClass ForeignObject { get; set; }

    // This is a "Foreign Key Property"
    [ForeignKey("ForeignObject")]
    public int ForeignObjectID { get; set; }
}

上述代码 sn-p 中的ForeignKey 属性将ForeignObjectID 属性标识为ForeignObject 属性的外键。在你的类中你仍然需要一个外来对象的实例。

您也可以在导航属性上使用ForeignKey属性,只需将外键属性的名称传递给属性即可:

public class MyClass
{
    // This is a "Navigation Property"
    [ForeignKey("ForeignObjectID")]
    public MyOtherClass ForeignObject { get; set; }

    // This is a "Foreign Key Property"
    public int ForeignObjectID { get; set; }
}

【讨论】:

  • 所以如果我想用Class1中的PK作为Class2中的FK,你是说,我在Class2的类定义中写了Public Class1 class1{get;set;}?
  • 请记住,我在不知道您使用的是什么 ORM 的情况下回答了这个问题(NHibernate 根据您的其他评论),所以这可能会有所不同。我对 NHibernate 不熟悉。
  • 即使类定义位于同一命名空间内的两个不同的 .cs 文件中,此功能是否有效。
  • 我现在也在使用 EF。谢谢
  • 像往常一样创建类/对象;单独的文件很好。当你真正开始映射你的对象时,你指定了键(pk & fk)之类的东西。您上面使用的数据注释是 EF 特有的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
相关资源
最近更新 更多