Así que decir Tengo 2 entidades, Post
y PostHistory
. Cada vez que creo o edito una publicación, quiero crear una copia exacta de ella como PostHistory
para registrar todos los cambios realizados en una publicación. Decir que la entidad resultante tiene la siguiente definición:¿Cómo puedo crear dos entidades asociadas a la vez con EF4 Code-First
public class Post
{
public int Id { get; set; }
public string Text { get; set; }
public virtual ICollection<PostHistory> PostHistory{ get; set; }
}
El problema viene cuando creo mi primer Post
. Por ejemplo, si intento esto:
Post post = new Post { Text = "Blah" };
context.Posts.Add(post);
PostHistory history = new PostHistory { Text = "Blah"};
context.PostHistory.Add(history);
post.PostHistory.Add(history);
que pueden fallar debido ya que ambos post
y history
son nuevas entidades, Post.PostHistory
es nula debido a que no habiendo sido aún inicializado. La única forma que puedo ver para hacer esto es primero comprometer post
a la base de datos, luego confirmar history
a la base de datos, pero no veo por qué realizar 2 insertos por separado debería ser necesario para esto.
Si tengo un constructor que inicializa el ICollection
a un List<T>
todo funciona bien, pero obligando a la aplicación a List<T>
causas distintas cuestiones, y casi no hay tutoriales de código primero hacer esto iniciación forzada.
Entonces, ¿cuál es la mejor manera de manejar esta situación?
Inicializar la colección como una lista funciona, pero no es una buena opción. La razón es que no se puede convertir una Lista en una EntityCollection (por lo que puedo verificar si la colección ha sido cargada con entusiasmo, por ejemplo). –
KallDrexx
¿Cómo se comprueba si la colección está ansiosamente cargada con 'EntityCollection'? –
La clase 'EntityCollection' tiene una propiedad 'IsLoaded' –
KallDrexx