【问题标题】:ASP MVC3 adding primary key that doesn't exist in databaseASP MVC3添加数据库中不存在的主键
【发布时间】:2013-03-22 17:28:22
【问题描述】:

我正在尝试将名称为 AgentId 的表添加到我的 ASP MVC 站点。该表没有主键,但它使用外键将其映射到另一个表BankMasterList。一个代理可能与多家银行合作,因此代理 ID 通常会在AgentId 表中出现多次。

但是,每次我尝试这样做时,Visual Studio 都会将表 AgentId 的第一列(列名恰好与表同名:AgentId)分类为主键。

如果我删除主键指定并点击保存/构建,Visual Studio 将继续删除包含在 .ttText 模板转换工具包文件中的每个 .cs 模型。显然,在此之后项目爆炸了,因为所有控制器现在都使用无效的命名空间。

任何人都可以就发生的事情提供任何建议或解释吗?

这是来自AgentId 表的 SQL Server Management Studio 的屏幕截图:

这是 Visual Studio 项目中.edmx 文件中描述的表格:

【问题讨论】:

  • AgentId 不是主键?
  • 如果 EDMX 设计器在表上找不到实际的主键,它将选择 所有不可为空的列作为主键。但是,表应该总是有一个主键!
  • @Robert: AgentId(列名)不是主键。
  • @marc:由于我们将有重复的代理 ID 和银行 ID,因此我们在没有主键的情况下离开了表格,尽管该项目仍处于概念验证阶段。当我从AgentId列中删除主键时,删除所有当前模型的项目该怎么办?
  • 在任何 real 表上都应该有一个正确的主键。总是。如果AgentIDID(也不是两者的组合)都不能作为主键 - 那么您应该添加一个单独的代理列(INT IDENTITY)作为主键。

标签: asp.net-mvc asp.net-mvc-3 visual-studio-2010 entity-framework edmx


【解决方案1】:

如果 EDMX 设计器在表上找不到实际的主键,它将选择表的所有不可为空的列作为“替代”主键。

一个“真正的”表(不仅仅是临时的,例如批量加载)应该总是有一个主键!如果AgentIDID都不能单独用作主键,我会尝试看看两者的组合(AgentID, ID)是否可以作为您的主键;如果这也不起作用,那么我建议添加一个单独的代理列 (INT IDENTITY) 作为主键。您应该始终能够唯一且可靠地识别任何表格的每一行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-16
    • 2011-10-10
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 2020-05-05
    相关资源
    最近更新 更多