C# 编辑已设置为主键的字段

C# 编辑已设置为主键的字段,c#,asp.net,asp.net-mvc,entity-framework,C#,Asp.net,Asp.net Mvc,Entity Framework,我目前有一个显示设置列表的页面。数据表有3个字段,分别称为名称(PK)、品牌代码和值。数据来自不包含ID字段的数据库,在我的应用程序中,如果需要,我希望能够在所有字段中编辑此数据。我可以编辑品牌代码和值,但不能编辑名称,因为它被设置为主键。有没有办法让我也可以编辑名称字段 型号 [Table("Settings")] public class ServiceSettings { [Key] public string Name { get; set; } public s

我目前有一个显示设置列表的页面。数据表有3个字段,分别称为名称(PK)、品牌代码和值。数据来自不包含ID字段的数据库,在我的应用程序中,如果需要,我希望能够在所有字段中编辑此数据。我可以编辑品牌代码和值,但不能编辑名称,因为它被设置为主键。有没有办法让我也可以编辑名称字段

型号

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

}
这是我单击“保存更改”时收到的错误

Store update、insert或delete语句影响了意外的行数(0)。自加载实体后,实体可能已被修改或删除

如果您需要更多信息,请告诉我


提前感谢。

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

更新PK列是一种糟糕的做法——不要这样做

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

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


不过,我不推荐这种解决方案。仅在绝对必要时使用。PKs不应该更新并非没有理由。

您不能编辑主键字段

唯一不涉及向数据库添加特定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

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

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

You can also create temporary ID column and declare it as PK
如果是现有的大型数据库,则可以在其中编辑表,因此您可以将
Name
设置为
Unique key
,并创建另一个
ID
PK


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

更多问题,请回复我:)