Вставка данных с использованием модели Entity Framework

89

Я пытаюсь вставить некоторые данные в свою базу данных, используя модель Entity Framework, но по неизвестным мне причинам ничего не делает.

Я что-то упустил?

using (var context = new DatabaseEntities())
{
    var t = new test
    {
        ID = Guid.NewGuid(),
        name = "blah",
    };
    context.AddTotest(t);
    context.SaveChanges();
}
Роши
источник
Попробуйте 'SaveChanges (System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave);'
Виллем,
6
Сначала код? Модель первая? Он ломается или просто ничего не хранит? Что говорит SQL Profiler? Отправляется ли вообще что-нибудь в базу данных?
Деннис Трауб,

Ответы:

117

Должен быть:

context.TableName.AddObject(TableEntityInstance);

Куда:

  1. TableName: имя таблицы в базе данных.
  2. TableEntityInstance: экземпляр класса сущности таблицы.

Если у вас стол Orders, то:

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

Например:

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

Вот живой пример:

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();
  }
}
ДмитрийБойко
источник
1
У меня нет метода AddObject.
Rocshy
@Dennis Traub спросил вас о вашей модели. Пожалуйста, предоставьте дополнительную информацию об этом.
DmitryBoyko
29
Используйте .Add, а не .AddObject
Дейл Фрейзер
9
В EF 6 вы бы использовали .Add вместо .AddObject
Дэвид
1
Фантастический ответ! спасибо за это, поскольку он показывает, как читать и писать с использованием структуры сущностей
Стивен Пефанис
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();

Должен сделать это

Nawed Nabi Zada
источник
7

[HttpPost] // он используется, когда вы пишете логику для события нажатия кнопки

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();
}
Санкет Парих
источник
если у меня
возникнут вопросы,
3

Я использую EF6 и нахожу что-то странное,

Предположим, у клиента есть конструктор с параметром,

если я использую new Customer(id, "name"), и делаю

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

Он проходит без ошибок, но когда я смотрю в базу данных, я на самом деле обнаруживаю, что данные НЕ вставляются,

Но если я добавлю фигурные скобки, используйте new Customer(id, "name"){}и сделайте

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

данные будут фактически вставлены,

Кажется, что фигурные скобки имеют значение, я думаю, что только при добавлении фигурных скобок структура сущности распознает, что это настоящие конкретные данные.

Ю Ян Цзянь
источник