¿Es posible crear como elemento proxy en EF Core?
Por ejemplo, en la base de datos existe el elemento con el id 1, que tiene el nombre Example . El segundo elemento con id 2 no tiene nombre (es nulo), pero tiene una referencia al elemento 1 ("id_replace"). En este caso, me gustaría que el nombre devuelto por el artículo 2 sea "Ejemplo" como el artículo 1. Y también la cita "Incluye" para las referencias del artículo 1.
La razón por la que tengo una idea tan extraña es que necesito haber vinculado los elementos, y si el elemento 1 cambia, los cambios realizados también se muestran en el elemento 2.
Seguro que puede. Suponiendo que su clase es:
public class YourClass { public int id { get; set; } public string name { get; set; } public int? id_replace { get; set; } }En su clase, debe tener las propiedades de referencia de una a muchas:
public YourClass parent { get; set; } public IList<YourClass> children { get; set; }Luego, en su clase DbContext, en la función de anulación OnModelCreating, debe tener una relación establecida en la API fluida que indique que id_replace es una clave externa autorreferencial:
modelBuilder.Entity<YourClass>(entity => { entity.HasOne(x => x.parent) .WithMany(x => x.children) .HasForeignKey(x => x.id_replace) .OnDelete(DeleteBehavior.SetNull); });Después de hacer eso (y migrar), tiene las propiedades de navegación necesarias para poder agregar propiedades calculadas que no representan nada en la base de datos. Entonces tu clase puede tener la propiedad:
public int alt_name => name??$"\"{parent.name}\"";Eventualmente, su clase se verá así:
public class YourClass { public int id { get; set; } public string name { get; set; } public int? id_replace { get; set; } public YourClass parent { get; set; } public IList<YourClass> children { get; set; } public int alt_name => name??$"\"{parent.name}\""; } De esa manera, puede descartar la propiedad de name y simplemente llamar a la propiedad alt_name . Incluso puede establecer la propiedad del name como privada o cambiar los nombres para evitar confusiones.