有关实体框架的问题:ID是否被视为关键值?

时间:2019-06-14 04:32:25

标签: c# entity-framework

将对象添加到数据库时,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; }
}

}

1 个答案:

答案 0 :(得分:0)

EF将自动选择Id字段作为主键,如果没有Id字段,它可能选择AulaID作为主键。那就是约定,而不是配置。

但是,您可以通过在POCO类或EF配置中将某些其他字段标记为表的主键来更改该行为。 在没有显式命令的情况下,EF将使用约定来确定主键。