autoincrement and SQL's Identity

本文关键字:Identity and SQL autoincrement | 更新日期: 2023-09-27 18:00:53

SQL数据库中的自动递增列

该链接回答了我对SQL中是否存在自动增量的怀疑。

我目前的问题是这样的,

我有两个由这些类表示的表

public class A
{
   [Key]
   public int AId{get;set;}
   public int BId{get;set;}
   [ForeignKey("BId")]
   public virtual B pb{get;set;}
}
public class B
{
   [Key]
   public int BId{get;set;}
   public int AId{get;set;}
}

在初始化A类的对象时,出现一个错误,称BId can not be null在MySQL中,我可以将列声明为AUTO_INCREMENT,然后将表初始化为类似的内容

INSERT INTO myTable(col2, col3, col4) VALUES('col2','col3','col4');

假设CCD_ 3被声明为自动递增。我想对类A中的BId做一些类似的事情,这样我就不必为它设置整数。

autoincrement and SQL's Identity

外键并不是这样工作的。

您可以使用主键执行您所要求的操作,如果主键是标识列,SQL Server将为您设置主键。但是对于外键,您应该已经知道您想要的值。您应该已经有了一个想要引用的B的现有实例——要么是这样,要么应该在创建A之前创建它。

如果你要求外键自动递增,你不是真的想要外键,你想要其他东西。您可能需要重新考虑您的表结构。

如果BId不需要值,请在MySQL中使用NULL约束声明它,并使C#属性也可以为null:public int? BId

如果要设置BId的默认值,可以使用DEFAULT子句声明它。

如果要为每个A创建一个新的B,可以使用表A上的触发器来完成。