我目前有一个显示设置列表的页面。数据表有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)。自实体加载后,实体可能已被修改或删除
如果您需要更多信息,请告知我们。
提前致谢。
答案 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。
希望这篇文章能解决你的问题:)