0

我正在尝试使用 ASP MVC 4 和 Entity Framework 4 创建非常简单的网站。我需要使用迁移功能,因为我会将应用程序部署到共享主机 (GoDaddy),并且我不想在每次更改时手动更改表。

建模一对多关系的正确方法是什么?使用其他实体类型或其他实体的主键类型?

当我使用另一种实体类型时,这是首选的,因为它使模型更清晰,迁移工具工作但 ASP MVC 的脚手架没有。即使我手动添加下拉列表以选择其他实体 ASP MVC 也没有解析请求权并且没有设置其他实体属性。

这是两个选项:

选项1:使用其他实体类型。

 public class Tenant {
    [Key]
    public string TenantID { get; set; }
    public string Name { get; set; }
  }

  public class Survey {
    [Key]
    public string SurveyID { get; set; }

    [Required]
    public Tenant Tenant { get; set; }

    [Required]
    [StringLength(100, MinimumLength=5)]
    public string Title { get; set; }

    [Required]
    public DateTime CreatedAt { get; set; }
  }

选项 2:使用主键类型。

  public class Tenant {
    [Key]
    public string TenantID { get; set; }
    public string Name { get; set; }
  }

  public class Survey {
    [Key]
    public string SurveyID { get; set; }

    [Required]
    public string TenantID { get; set; }

    [Required]
    [StringLength(100, MinimumLength=5)]
    public string Title { get; set; }

    [Required]
    public DateTime CreatedAt { get; set; }
  }

我在我的 ASP MVC 4 项目中为调查实体创建了带有脚手架的 MVC 控制器。它创建 CRUD 控制器和视图。在视图中,它没有为租户放置任何字段。在我自己添加之后,调用了 Create(Tenant tenant) 方法,但 HTML 表单发送的租户字段没有被 MVC 解析,也没有设置调查实体的租户字段。

我愿意

4

2 回答 2

1

这些看起来像您正在映射一对一关系而不是一对多。如果一项调查可以有多个租户,则:

public class Tenant {
    [Key]
    public string TenantID { get; set; }
    public string Name { get; set; }
public virtual  Survey Survey  {get; set;}
  }


  public class Survey {
    [Key]
    public string SurveyID { get; set; }

    [Required]
    [StringLength(100, MinimumLength=5)]
    public string Title { get; set; }

    [Required]
    public DateTime CreatedAt { get; set; }

    public virtual ICollection<Tenant> Tenant {get; set;}
}
于 2012-08-05T11:03:32.110 回答
-1

我发现这一系列的帖子解释了如何制作 EF 模型,以便它们可以与 EF 和 ASP MVC 一起使用。这个想法是同时拥有“普通”引用类型和强引用类型。

public class Team
{
    public int TeamId { get; set; }
    // ... other Team properties go here

    // Each Team has an optional "next opponent" which is another Team
    public int? NextOpponentId { get; set; }
    [ForeignKey("NextOpponentId")] public virtual Team NextOpponent { get; set; }

    // Each Team also has a required Manager and Administrator, both of which are people
    public int ManagerId { get; set; }
    public int AdministratorId { get; set; }
    [ForeignKey("ManagerId")] public virtual Person Manager { get; set; }
    [ForeignKey("AdministratorId")] public virtual Person Administrator { get; set; }
}
于 2012-08-05T13:41:26.427 回答