将值插入 Core 2.2 中的标识列
Insert value into identity column in Core 2.2
正在尝试在 MSSQL 服务器中为数据库设定种子。 'Id' 列设置为标识。我不明白为什么 EF 需要 'Id:
的数据
public class Location
{
public int? Id { get; set; }
public string Name { get; set; }
public IList<Office> Offices { get; set; }
}
...流利API:
modelBuilder.Entity<Location>()
.HasKey(k => k.Id);
modelBuilder.Entity<Location>()
.Property(p => p.Id)
.UseSqlServerIdentityColumn()
.ValueGeneratedOnAdd();
modelBuilder.Entity<Location>()
.HasData(
new Location() { Name = "Sydney" },
new Location() { Name = "Melbourne" },
new Location() { Name = "Brisbane" }
);
...据我所知,如果 'Id' 是由服务器在插入时生成的,则不需要提供。为什么我会收到关于不提供 Id 的消息...
我认为错误在这里
public int? Id { get; set; }
ID 不能为空。
更新:
我的意思是你应该写:
public int Id { get; set; }
问号使您的 属性 可为空,但由于它是主键,因此不能为空。
我在这里做了一个小例子:
using System.Collections.Generic;
namespace ConsoleApp2.Models
{
public class Location
{
public int Id { get; set; }
public string Name { get; set; }
public IList<Office> Offices { get; set; }
}
}
流利Api
migrationBuilder.CreateTable(
name: "Locations",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
Name = table.Column<string>(nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Locations", x => x.Id);
});
我可以毫无问题地添加新位置。
using ConsoleApp2.Models;
using System.Collections.Generic;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
MyDbContext _c = new MyDbContext();
List<Office> list = new List<Office>()
{
new Office()
{
OfficeName = "Reception"
}
};
Location l = new Location()
{
Name = "New York",
Offices = list
};
_c.Locations.Add(l);
_c.SaveChanges();
}
}
}
我正在使用 .net core 2.1 和 EFcore 2.2.2。
希望对你有所帮助。
正在尝试在 MSSQL 服务器中为数据库设定种子。 'Id' 列设置为标识。我不明白为什么 EF 需要 'Id:
的数据public class Location
{
public int? Id { get; set; }
public string Name { get; set; }
public IList<Office> Offices { get; set; }
}
...流利API:
modelBuilder.Entity<Location>()
.HasKey(k => k.Id);
modelBuilder.Entity<Location>()
.Property(p => p.Id)
.UseSqlServerIdentityColumn()
.ValueGeneratedOnAdd();
modelBuilder.Entity<Location>()
.HasData(
new Location() { Name = "Sydney" },
new Location() { Name = "Melbourne" },
new Location() { Name = "Brisbane" }
);
...据我所知,如果 'Id' 是由服务器在插入时生成的,则不需要提供。为什么我会收到关于不提供 Id 的消息...
我认为错误在这里
public int? Id { get; set; }
ID 不能为空。
更新: 我的意思是你应该写:
public int Id { get; set; }
问号使您的 属性 可为空,但由于它是主键,因此不能为空。
我在这里做了一个小例子:
using System.Collections.Generic;
namespace ConsoleApp2.Models
{
public class Location
{
public int Id { get; set; }
public string Name { get; set; }
public IList<Office> Offices { get; set; }
}
}
流利Api
migrationBuilder.CreateTable(
name: "Locations",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
Name = table.Column<string>(nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Locations", x => x.Id);
});
我可以毫无问题地添加新位置。
using ConsoleApp2.Models;
using System.Collections.Generic;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
MyDbContext _c = new MyDbContext();
List<Office> list = new List<Office>()
{
new Office()
{
OfficeName = "Reception"
}
};
Location l = new Location()
{
Name = "New York",
Offices = list
};
_c.Locations.Add(l);
_c.SaveChanges();
}
}
}
我正在使用 .net core 2.1 和 EFcore 2.2.2。
希望对你有所帮助。