Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 首先更新实体框架代码中的主键_Sql Server_Asp.net Mvc_Database_Entity Framework - Fatal编程技术网

Sql server 首先更新实体框架代码中的主键

Sql server 首先更新实体框架代码中的主键,sql-server,asp.net-mvc,database,entity-framework,Sql Server,Asp.net Mvc,Database,Entity Framework,我想更新中介表的主键。建议使用另一个主键,不要更改它,但我们在其他非EF项目中使用我们的表,我没有设计它们,也无法更改它们。我还有别的选择吗?任何东西甚至删除旧记录并插入新记录。我只是不知道如何检索旧值 这是我的班级: public class ZChangeUnits : User { [Key] [Column(TypeName = "VARCHAR", Order = 0), StringLength(4)] public string CCode1 { get;

我想更新中介表的主键。建议使用另一个主键,不要更改它,但我们在其他非EF项目中使用我们的表,我没有设计它们,也无法更改它们。我还有别的选择吗?任何东西甚至删除旧记录并插入新记录。我只是不知道如何检索旧值

这是我的班级:

public class ZChangeUnits : User
{
    [Key]
    [Column(TypeName = "VARCHAR", Order = 0), StringLength(4)]
    public string CCode1 { get; set; }

    [ForeignKey("CCode1")]
    public virtual ZUnits ZUnits1 { get; set; }

    [Key]
    [Column(TypeName = "VARCHAR", Order = 1), StringLength(4)]
    public string CCode2 { get; set; }

    [ForeignKey("CCode2")]
    public virtual ZUnits ZUnits2 { get; set; }

    [Column(TypeName = "NUMERIC")]
    [DecimalPrecision(18, 5)]
    public decimal NZarib { get; set; }
}
更新

我已经发布了下面的模式,左表用于单位转换。实际上,这是本文中建议的方法

我想不出任何其他方法来实现这一点。无论我是应该更新我的表的设计还是一些EF代码,都可以完成这项工作。欢迎提供任何帮助和解决方案。:)


可更新的主键是一种非常糟糕的数据库气味。该指南与实体框架无关,但通常与数据库设计有关。看起来您正在使用一个具有业务意义的字段作为主键,这是另一个非常糟糕的DB设计实践。即使使用普通SQL,也很难掩盖这样的错误。唯一现实的解决方案是修复数据库。否则,请忘记ORM(任何ORM,而不仅仅是EF),编写一个存储过程来显式执行
UPDATE
语句。您可以通过加载实体并使用相同的DbContext更改其键来克服这一问题。那么我应该如何实现多对多关系?多对多关系是使用中间表实现的,无论您是否使用ORM,例如StudentCourses链接学生和课程。ORMs不能很好地处理M-N关系,因此最好创建一个单独的类来表示该关系,如图所示
ZChangeUnit
是中间表吗!:)请考虑上面的图式,那有什么问题呢?您是否使用一行合并两个实际行?只是不要,存储每一行。我怀疑您正在尝试解决另一个问题,并且在尝试解决方案时遇到了问题。您不需要仅仅为了创建M-N关系而违反适当的设计,EF也不会强迫您这样做。你的实际问题是什么?