Esto parece que debería ser bastante obvio, pero algo sobre el marco de la entidad me está confundiendo y no puedo hacer que esto funcione.Cómo insertar o actualizar muchas tablas en .NET entidad framework
En pocas palabras, tengo tres mesas donde los valores de identidad son las columnas de identidad: Usuarios (ID de usuario, nombre de usuario) Categorías (categoryId, categoryName) joinTable (identificación de usuario, CategoryId) compuesto.
En el diseñador de entidades (esto es .net 4.0), cuando importo estas tablas, como se esperaba, la tabla de unión no aparece pero los Usuarios y las Categorías muestran una relación. El siguiente código:
var _context = new MyContext();
var myUser = new User();
myUser.UserName = "joe";
var myCategory = new Category();
myCategory.CategoryName = "friends";
_context.Users.AddObject(myUser);
myUser.Categories.Add(myCategory);
var saved = _context.SaveChanges();
devuelve un error de (aunque nada ha sido añadido a la base de datos):
An item with the same key has already been added.
Si añado lo siguiente antes de guardar:
_context.Categories.AddObject(myCategory);
myCategory.Users.Add(myUser);
tengo la mismo error y nada guardado en el db. Si salvo el myUser y el objeto myCategory antes de intentar asociar ellos, tanto ahorrar, pero el segundo salvamento arroja un error, sin nada añadido a la tabla de unión:
Cannot insert the value NULL into column 'UserId', table '...dbo.JoinTable'; column does not allow nulls. INSERT fails. The statement has been terminated.
estoy claramente no entender cuántos a muchas relaciones se insertan. ¿Qué me estoy perdiendo?
¿Cuál es el tipo de sus propiedades de identificación? –
int, identitity –
Aún estoy tratando de resolver esto. Al agregar un tercer campo espurio a la tabla de unión (DateCreated), puedo forzar al diseñador de la entidad a mostrar la tabla de unión. Luego puedo definir las relaciones: var myJoin = new JoinTable {UserId = myUser.UserId, CategoryId = myCategory.CategoryId}; Y, a continuación, se insertará correctamente al guardar: _context.Categories.AddObject (myCategory); myCategory.JoinTables.Add (myJoin); myJoin.User = myUser; –