可为null<;int>;LINQ到SQL关系中的id

本文关键字:SQL 关系 id gt null lt int 可为 LINQ | 更新日期: 2023-09-27 18:00:30

我使用LINQ to SQL查询与Visual C#应用程序中的数据库进行通信。我正在使用延迟加载(参见如何:映射数据库关系(LINQ到SQL))。我使用ColumnAttribute定义映射如下:

[Column(Storage = "id", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true, CanBeNull=false)]
    public Nullable<int> Id {
        get { return this.id; }
        set { this.id = value; }
    }

我想让数据库完全控制表条目的Id和相应的关系(外键)。当我添加一个新条目时,我希望所有关系表的Id都是null,直到DataContext.SubmitChanges()将它们插入数据库,此时数据库将创建所有Id。

我的问题:我见过不同的情况,其中Id在C#中被设置为可以为null,而其他情况则不可以。更好的方法是什么?

可为null<;int>;LINQ到SQL关系中的id

通常只使用int而不是Nullable<int>。事实上,SQL Server禁止可为null的主键和标识。您可以通过将DbContext中实体的State设置为EntityState.Addd来告诉EntityFramework对象是否是新的

using (var context = new BloggingContext()) 
{ 
    var blog = new Blog { Name = "ADO.NET Blog" }; 
    context.Entry(blog).State = EntityState.Added; 
    context.SaveChanges(); 
}

一旦您将State设置为EntityState。添加EntityFramework,SQL Server将通过在数据库中插入新记录并为标识字段分配适当的值来处理其余过程。在DbSet上调用Add()方法时,设置State的过程实际上是由EntityFramework隐式处理的,因此实际上不必显式执行此操作。