Вопрос о Entity Framework: считается ли ID ключевым значением? - PullRequest
0 голосов
/ 14 июня 2019

EF автоматически присваивает идентификаторы при добавлении объекта в базу данных?

ex: когда я тестировал его, я не знал, как он работает, и запускал код, который добавляет пару объектов кБД пару раз, но при проверке я обнаружил, что все идентификаторы были идеально увеличены на один, даже когда я установил значение вручную

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 голосов
/ 14 июня 2019

EF автоматически выберет поле Id в качестве первичного ключа, он мог бы выбрать AulaID в качестве первичного ключа в отсутствие поля Id. Это соглашение по конфигурации.

Однако вы можете изменить это поведение, пометив какое-то другое поле как первичный ключ таблицы в классе POCO или в конфигурациях EF. При отсутствии явной команды EF будет использовать соглашения для определения первичного ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...