web-dev-qa-db-fra.com

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

J'essaie d'insérer des données dans ma base de données à l'aide du modèle Entity Framework, mais pour des raisons inconnues, 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();
}
81
Rocshy

CA devrait etre:

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é de 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();
  }
}
101
Developer
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

36
Nawed Nabi Zada

[HttpPost] // il utilise lorsque vous écrivez de la logique sur un é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();
}
6
sanket parikh

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

Supposons que le client ait un constructeur avec le 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 lorsque 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 crochets font la différence, je suppose que ce n’est que lorsque les crochets seront ajoutés que le cadre des entités reconnaîtra que c’est une donnée concrète.

3
yu yang Jian