tutorial mvc framework first español ejemplos curso c# entity-framework c#-4.0 entity-framework-4

c# - mvc - Entity framework 4.0 extraño con guardar datos



wpf c# ejemplos (2)

Me enfrenté con el siguiente problema. Tengo un almacén de datos con modelo

public class GameResult { public int GameResultId { get; set; } public virtual Competition Competition { get; set; } public virtual CustomDate DateGame { get; set; } public virtual Contender ContenderFirst { get; set; } public virtual Contender ContenderSecond { get; set; } public virtual Location Location { get; set; } } public class Competition { [Key] public int CompetitionId { get; set; } public string Name { get; set; } //Lazy loading public virtual KindSport KindSport { get; set; } }

Algo así genero algunos datos para la tabla de hechos GameResult

gameResult.Location = location; gameResult.Competition = competition; gameResult.ContenderFirst = firstContender; gameResult.ContenderSecond = secondContender; public void saveGameResult(GameResult gameResult) { using (var db = new GameContext()) { db.GameResults.Add(gameResult); db.SaveChanges(); } }

Pero cuando trato de guardar datos, obtengo que no guarde la enity, de hecho, la tabla que guardan en cascadas también guardada en tablas secundarias como Location, Contender .

¿Cómo puedo resolver mi problema?


debe cargar las entidades Location y Contender desde la base de datos. De lo contrario, se insertarán en él.


Add marcas al gráfico completo del objeto como Added .

Esta es una forma de solucionarlo:

public void saveGameResult(GameResult gameResult, .... more arguments ....) { using (var db = new GameContext()) { db.GameResults.Add(gameResult); gameResult.Location = location; gameResult.Competition = competition; gameResult.ContenderFirst = firstContender; gameResult.ContenderSecond = secondContender; db.SaveChanges(); } }

Pero luego tienes que agregar más argumentos.

Una forma más tediosa es dejar todo tal como está y marcar cada dimensión como UnChanged :

db.GameResults.Add(gameResult); Entry(gameResult.Location).State = EntityState.Unchanged; ...

Otra forma es establecer solo los valores de Id :

gameResult.LocationId = location.LocationId; ... etc. public void saveGameResult(GameResult gameResult) { ... (original code)

Pero, por supuesto, las propiedades Id primitivas deberían ser parte de la clase de hechos, formando asociaciones de claves foráneas .