编辑已设置为主键的字段

时间:2015-11-20 11:43:01

标签: c# asp.net asp.net-mvc entity-framework

我目前有一个显示设置列表的页面。数据表有3个字段,名为Name(PK),BrandCode和Value。数据来自不包含ID字段的数据库,在我的应用程序中,我希望能够在必要时在所有字段中编辑此数据。我可以编辑BrandCode和Value,但不能编辑Name,因为它被设置为主键。有没有解决方法,以便我也可以编辑名称字段?

模型

[Table("Settings")]
public class ServiceSettings
{
    [Key]
    public string Name { get; set; }
    public string BrandCode { get; set; }  
    public string Value { get; set; }

}

这是我点击保存更改时收到的错误。

  

存储更新,插入或删除语句会影响意外的行数(0)。自实体加载后,实体可能已被修改或删除

如果您需要更多信息,请告知我们。

提前致谢。

3 个答案:

答案 0 :(得分:2)

如果您有权访问数据库 - 请创建一个用作密钥的Id列,并将“名称”列设置为“唯一”。

更新PK列是非常糟糕的做法 - 不要这样做。

我想回答这个问题。
如果没有其他解决方案,解决方法(我称之为黑客)将是:
1)暂时保存您行中的所有数据 2)删除该行
3)创建一个包含所有更新值的新行

如果您有外键,您还需要更新它们。

我不推荐这个解决方案。只有在绝对必要时才使用它。并不是没有理由不更新PK。

答案 1 :(得分:0)

您无法编辑主键字段。

您唯一不涉及向数据库添加特定ID字段的解决方案是在模型中创建一个id字段:

[Table("Settings")]
public class ServiceSettings
{
    [Key]
    public int Id { get; set; }  // Created ID field
    public string Name { get; set; }
    public string BrandCode { get; set; }  
    public string Value { get; set; }

}

并在加载数据时填充它。

最好使用GUID而不是int来确保唯一性。

答案 2 :(得分:0)

我只是分享其中一个建议或更好的方法:)

请不要尝试将名称设为PK,因为它可能包含相同的数据。

You can also create temporary ID column and declare it as PK
  

如果是现有的大型数据库,可以使用编辑表,那么您可以将Name设为Unique key并创建另一个ID PK。

希望这篇文章能解决你的问题:)