C# .Net Linq 添加带有标识字段的新记录

C# .Net Linq adding new record with identity field

我有一个来自数据库模型的 table 个 phone 个数字。 table 有一个主键 phoneId 和一个 "autoincrement" 值。我需要插入一个新行,但 table 的模型版本没有可为 null 的 phoneId 成员。如何指定新记录应获得下一个 autoincrement/identity 编号?

我正在尝试:

    var newPhone = new Phone() {
        PhoneId = null,
        PhoneNumber = newNumber
    };

    try {
        pdb.Phones.Add(newPhone);
        pdb.SaveChanges();
    } catch (Exception e) {
        Console.WriteLine("COULD NOT ADD new number: {0}", e.Message);
    }

在模型 PhoneId 中是 "long" 而不是 "long?"。如果不需要,我不想更改模型。如果我重建模型,我将丢失更改并且可能会忘记我为什么需要它。

我尝试复制模型 Phone class 并将该版本的 PhoneId 设置为可为空,但随后 Linq .Add() 方法停止了,因为它无法转换一个给另一个。

我错过了什么?

您不必设置该字段, 该字段在您提交模型时被初始化

var newPhone = new Phone() {
        PhoneNumber = newNumber
    };

try {
    pdb.Phones.Add(newPhone);
    pdb.SaveChanges();
} catch (Exception e) {
    Console.WriteLine("COULD NOT ADD new number: {0}", e.Message);
}

该模型没有 phoneID,因为数据库会在您插入记录时设置该值。主键也不能为空。

More about Identity fields

看看示例 A:在上面的 link 中...您会看到他们省略了 IDENTITY 字段。

 var newPhone = new Phone(); 
 newPhone.PhoneNumber = newNumber;

 try 
 {
    pdb.Phones.Add(newPhone);
    pdb.SaveChanges();
 }
 catch (Exception e) 
 {
    Console.WriteLine("COULD NOT ADD new number: {0}", e.Message);
 }