transact licence full example descargar convert c# linq entity-framework .net-4.0 linqpad

c# - licence - Entity framework Incluir comando-¿Unión izquierda o interior?



linqpad licence (2)

Sé que esta es una pregunta antigua, pero si alguien más aterriza aquí utilizando el Código EF Primero como soy, mi problema fue en las asignaciones fluidas:

protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity<Parent>() .HasOptional(a => a.Child) /* LEFT OUTER JOIN */ .WithMany() .HasForeignKey(a => a.ChildId); }

se traduce como IZQUIERDA EXTERNA IZQUIERDA mientras que

modelBuilder.Entity<Parent>() .HasRequired(a => a.Child) /* INNER JOIN */ .WithMany() .HasForeignKey(a => a.ChildId);

Se traduce como UNIÓN INTERNA .

Mientras investigaba la diferencia entre Include y Join , encontré que:

Si la base de datos no incluye una clave externa, no tiene propiedades de navegación, por lo que es mejor usar Join

Si tiene accesorios de navegación, entonces use Include . (También guarda un hit db.)

Pero una respuesta aquí llamó mi atención:

Incluir se implementa como una unión. Dependiendo de la nulabilidad del enlace incluido, es una unión interna o izquierda .

Pregunta:

¿Cómo afecta la nulidad a la unión izquierda / interior?

En el servidor Sql puedo tener una tabla de Cities y una tabla de Persons y una persona puede tener un CityID NULL .

¿ Por qué entidad Framework decide por mí qué tipo de unión es?

edición: visualización:

Ahora cambiemos CityId a no null:

Y aquí está el cambio:


Supongamos que en su clase hay una restricción [Required] en City o CityID. Y supongamos que hay registros Personales sin una Ciudad (válida). La única forma de satisfacer el [Required] es realizar una unión interna.

Pero siempre que las restricciones en su Db y modelo coincidan (es decir, CityID INT NOT NULL ) no importará realmente qué tipo de Join se use. Ese debería ser el caso normal.

Y sin la restricción, por supuesto, usted esperaría una unión izquierda.