将对象添加到数据库时,EF是否会自动分配ID?
ex:当我测试它时,我不知道它是如何工作的,并运行了几次向数据库添加几个对象的代码,但是当检查它时,我发现所有的ID都增加了即使我手动设置该值也可以完美地完成
class Program
{
static void Main(string[] args)
{
using (var db = new AulaContext())
{
var a = new Aula();
var b = new Aula();
var c = new Aula();
var d = new Aula();
var e = new Aula();
var f = new Aula();
var g = new Aula();
var h = new Aula();
a.Id = 0;
a.Capacidad = 30;
a.ConexionARed = true;
a.Proyeccion = true;
a.Aul = "1.1";
b.Id = 0;
b.Capacidad = 30;
b.ConexionARed = true;
b.Proyeccion = true;
b.Aul = "1.2";
c.Id = 0;
c.Capacidad = 30;
c.ConexionARed = true;
c.Proyeccion = true;
c.Aul = "1.3";
d.Id = 0;
d.Capacidad = 30;
d.ConexionARed = true;
d.Proyeccion = true;
d.Aul = "2.1";
e.Id = 0;
e.Capacidad = 30;
e.ConexionARed = true;
e.Proyeccion = true;
e.Aul = "2.2";
f.Id = 0;
f.Capacidad = 30;
f.ConexionARed = true;
f.Proyeccion = true;
f.Aul = "2.3";
g.Id = 0;
g.Capacidad = 30;
g.ConexionARed = true;
g.Proyeccion = true;
g.Aul = "1.4";
h.Id = 0;
h.Capacidad = 30;
h.ConexionARed = true;
h.Proyeccion = true;
h.Aul = "1.5";
db.Aulas.Add(a);
db.Aulas.Add(b);
db.Aulas.Add(c);
db.Aulas.Add(d);
db.Aulas.Add(e);
db.Aulas.Add(f);
db.Aulas.Add(g);
db.Aulas.Add(h);
db.SaveChanges();
var query = from aul in db.Aulas
orderby aul.Id
select aul;
foreach (var item in query)
{
Console.WriteLine(item.ToString());
}
Console.ReadKey();
}
}
}
public class Aula
{
private int id;
public int Id { get {return id;} set { id = value; } }
private int capacidad;
public int Capacidad { get { return capacidad; } set { capacidad = value; } }
private bool conexionARed;
public bool ConexionARed { get { return conexionARed; } set { conexionARed = value; } }
private bool proyeccion;
public bool Proyeccion { get { return proyeccion; } set { proyeccion = value; } }
private string aul;
public string Aul { get { return aul; } set { aul = value; } }
public override string ToString()
{
return "ID: " + this.id + "\n" +
"Capacidad: " + this.capacidad + "\n" +
"Conexion a red: " + this.conexionARed + "\n" +
"Proyector: " + this.proyeccion + "\n" +
"Aula: " + this.aul;
}
}
public class AulaContext : DbContext
{
public DbSet<Aula> Aulas { get; set; }
}
}
答案 0 :(得分:0)
EF将自动选择Id字段作为主键,如果没有Id字段,它可能选择AulaID作为主键。那就是约定,而不是配置。
但是,您可以通过在POCO类或EF配置中将某些其他字段标记为表的主键来更改该行为。 在没有显式命令的情况下,EF将使用约定来确定主键。