Insérer des données à l'aide du modèle Entity Framework

88

J'essaie d'insérer des données dans ma base de données en utilisant le modèle Entity Framework, mais pour des raisons inconnues pour moi, cela ne fait rien.

Est-ce que j'ai râté quelque chose?

using (var context = new DatabaseEntities())
{
    var t = new test
    {
        ID = Guid.NewGuid(),
        name = "blah",
    };
    context.AddTotest(t);
    context.SaveChanges();
}
Rocshy
la source
Essayez 'SaveChanges (System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave);'
Willem
5
Le code d'abord? Modèle d'abord? Casse-t-il ou ne stocke-t-il rien? Que dit SQL Profiler? Y a-t-il quelque chose qui est envoyé à la base de données?
Dennis Traub du

Réponses:

115

Ça devrait être:

context.TableName.AddObject(TableEntityInstance);

Où:

  1. TableName: le nom de la table dans la base de données.
  2. TableEntityInstance: une instance de la classe d'entité table.

Si votre table est Orders, alors:

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

Par exemple:

 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();
 }

Voici un exemple en direct:

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();
  }
}
Développeur
la source
1
Je n'ai aucune méthode AddObject.
Rocshy
@Dennis Traub vous a posé des questions sur votre modèle. Veuillez fournir plus d'informations à ce sujet.
Développeur
29
Utilisez .Add plutôt que .AddObject
Dale Fraser
9
Sur EF 6, vous utiliseriez .Add plutôt que .AddObject
David
1
Réponse fantastique! merci pour cela car il montre comment lire et écrire en utilisant le framework d'entité
Stephen Pefanis
41
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();

Devrait le faire

Nawed Nabi Zada
la source
7

[HttpPost] // il est utilisé lorsque vous écrivez une logique sur l'événement de clic de bouton

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();
}
sanket parikh
la source
si une question me demande
sanket parikh
3

J'utilise EF6 et je trouve quelque chose d'étrange,

Supposons que le client ait un constructeur avec un paramètre,

si j'utilise new Customer(id, "name")et fais

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

Il fonctionne sans erreur, mais quand je regarde dans la base de données, je constate en fait que les données ne sont PAS insérées,

Mais si j'ajoute les accolades, utilisez new Customer(id, "name"){}et faites

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

les données seront alors effectivement insérées,

semble que les Brackets Curly font la différence, je suppose que ce n'est que lorsque vous ajoutez des Brackets Curly que le framework d'entité reconnaîtra qu'il s'agit d'une vraie donnée concrète.

yu yang jian
la source