ventajas tutorial que framework first existing español ejemplo desventajas code c# sql-server entity-framework ef-code-first

c# - tutorial - entity framework ventajas y desventajas



EF 6.1 Índice único anulable (1)

No encontré la manera de decirle a EF que use esta cláusula where, pero aquí hay alguna solución. Compruebe si encaja en su caso.

  1. Instale Entity Framework, defina su DbContext, entidades, conn string en app.config, etc.
  2. Habilitar migración: ejecute en Package Manager Console ''-EnableMigration''
  3. Crear DbMigration: ejecutar en la consola del gestor de paquetes ''Add-Migration MigrationName''
  4. En la clase DbMigration creada en el método ovverided Up , ejecute su sql para crear un índice nulo único.

código:

// Add unique nullable index string indexName = "IX_UQ_UniqueColumn"; string tableName = "dbo.ExampleClasses"; string columnName = "UniqueColumn"; Sql(string.Format(@" CREATE UNIQUE NONCLUSTERED INDEX {0} ON {1}({2}) WHERE {2} IS NOT NULL;", indexName, tableName, columnName));

Nota: no olvide crear una versión anterior, también. Método de Ovveride Down y uso del método DropIndex interior:

DropIndex(tableName, indexName);

También es posible que necesite un código adicional si ya hay datos en su base de datos que pueden entrar en conflicto con la restricción de índice único.

NOTA: Aquí puede usar el método CreateIndex, pero no pude crear el índice correcto con él. EF simplemente ignora mis AnónimosArgumentos o los escribo mal. Puede intentarlo usted mismo y escribir aquí con su resultado. La sintaxis es la siguiente:

CreateIndex( table: "dbo.ExampleClasses", columns: new string[] { "UniqueColumn" }, unique: true, name: "IX_UniqueColumn", clustered: false, anonymousArguments: new { Include = new string[] { "UniqueColumn" }, Where = "UniqueColumn IS NOT NULL" });

5 Intente agregar dos etries con valores nulos para la columna única y otros valores iguales.

Aquí está mi código de demostración - Pastebin

En EF 6.1 utilizando Code First, puede crear índices utilizando atributos en sus entidades o usar la API fluida a lo largo de las líneas de:

Property(x => x.PropertyName) .IsOptional() .HasMaxLength(450) .HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute("IX_IndexName") {IsUnique = true, }));

¿Hay alguna manera de decir andamio WHERE PropertyName IS NOT NULL de la misma manera que lo haría en SQL Server de forma nativa (ver: https://stackoverflow.com/a/767702/52026 )?