2012-01-12 18 views
54

Estoy tratando de insertar algunos datos en mi base de datos utilizando el modelo de Entity Framework, pero por alguna razón desconocida para mí, no hace nada.Insertar datos utilizando el modelo de Entity Framework

¿Falta algo aquí?

using (var context = new DatabaseEntities()) 
{ 
    var t = new test 
    { 
     ID = Guid.NewGuid(), 
     name = "blah", 
    }; 
    context.AddTotest(t); 
    context.SaveChanges(); 
} 
+0

Pruebe 'SaveChanges (System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave);' – Willem

+5

¿Primero el código? Modelo primero? ¿Se rompe o simplemente no almacena nada? ¿Qué dice SQL Profiler? ¿Hay algo que se envíe a la base de datos? –

Respuesta

69

Debería ser:

context.TableName.AddObject(TableEntityInstance); 

Dónde:

  1. TableName: el nombre de la tabla en la base de datos.
  2. TableEntityInstance: una instancia de la clase de entidad de tabla.

Si la tabla es Orders, entonces:

Order order = new Order(); 
context.Orders.AddObject(order); 

Por ejemplo:

var id = Guid.NewGuid(); 

// insert 
using (var db = new EfContext("name=EfSample")) 
{ 
    var customers = db.Set<Customer>(); 
    customers.Add(new Customer { CustomerId = id, Name = "John Doe" }); 

    db.SaveChanges(); 
} 

Aquí es un ejemplo vivo:

public void UpdatePlayerScreen(byte[] imageBytes, string installationKey) 
{ 
    var player = (from p in this.ObjectContext.Players where p.InstallationKey == installationKey select p).FirstOrDefault(); 

    var current = (from d in this.ObjectContext.Screenshots where d.PlayerID == player.ID select d).FirstOrDefault(); 

    if (current != null) 
    { 
    current.Screen = imageBytes; 
    current.Refreshed = DateTime.Now; 

    this.ObjectContext.SaveChanges(); 
    } 
    else 
    { 
    Screenshot screenshot = new Screenshot(); 

    screenshot.ID = Guid.NewGuid(); 
    screenshot.Interval = 1000; 
    screenshot.IsTurnedOn = true; 
    screenshot.PlayerID = player.ID; 
    screenshot.Refreshed = DateTime.Now; 
    screenshot.Screen = imageBytes; 

    this.ObjectContext.Screenshots.AddObject(screenshot); 
    this.ObjectContext.SaveChanges(); 
    } 
} 
+0

No tengo ningún método AddObject. – Rocshy

+0

@Dennis Traub le preguntó sobre su modelo. Proporcione más información al respecto. –

+0

No se rompe. No está almacenando nada. No tengo ningún problema en enumerar el contenido de mi tabla. Lo siento, soy nuevo en esto, no estoy usando el Analizador de SQL. Mi modelo solo tiene una tabla con 2 columnas. – Rocshy

23
var context = new DatabaseEntities(); 

var t = new test //Make sure you have a table called test in DB 
{ 
    ID = Guid.NewGuid(), 
    name = "blah", 
}; 

context.test.Add(t); 
context.SaveChanges(); 

Sho ULD hacerlo

+0

Perfecto, gracias! – taiar

4

[HttpPost] // se utiliza al escribir la lógica en el evento de clic de botón

public ActionResult DemoInsert(EmployeeModel emp) 
{ 
    Employee emptbl = new Employee();// make object of table 
    emptbl.EmpName = emp.EmpName; 
    emptbl.EmpAddress = emp.EmpAddress; 
    //add if any field you want insert 
    dbc.Employees.Add(emptbl);pass the table object 
    dbc.SaveChanges(); 

    return View(); 
} 
+0

si alguna consulta me pregunta –

2

estoy usando EF6, y me parece algo extraño,

Supongamos cliente tiene constructor parámetro,

si uso new Customer(id, "name"), y hago

using (var db = new EfContext("name=EfSample")) 
{ 
    db.Customers.Add(new Customer(id, "name")); 
    db.SaveChanges(); 
} 

I t ejecutar a través sin error, pero cuando miro en la base de datos, que se encuentran en el hecho de que los datos no se pueden insertar,

Pero si añado las llaves, utilice new Customer(id, "name"){} y hacer

using (var db = new EfContext("name=EfSample")) 
{ 
    db.Customers.Add(new Customer(id, "name"){}); 
    db.SaveChanges(); 
} 

la los datos se insertarán realmente,

parece que los Corchetes marcan la diferencia, supongo que solo cuando se agreguen Corchetes, la entidad marco reconocerá que se trata de datos concretos reales.

Cuestiones relacionadas