Entity Framework modelini kullanarak veri ekleyin


90

Veritabanıma Entity Framework modelini kullanarak bazı veriler eklemeye çalışıyorum, ancak bazı bilinmeyen nedenlerden dolayı bana hiçbir şey yapmıyor.

Burada bir şey mi kaçırıyorum?

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)' i deneyin; '
Willem

6
Önce Kod? Önce Model? Kırılıyor mu yoksa hiçbir şey depolamıyor mu? SQL Profiler ne diyor? Veritabanına gönderilen herhangi bir şey var mı?
Dennis Traub

Yanıtlar:


118

Olmalı:

context.TableName.AddObject(TableEntityInstance);

Nerede:

  1. TableName: veritabanındaki tablonun adı.
  2. TableEntityInstance: tablo varlık sınıfının bir örneği.

Masanız ise Orders:

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

Örneğin:

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

İşte canlı bir örnek:

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
Herhangi bir AddObject yöntemim yok.
Rocshy

@Dennis Traub size Modelinizi sordu. Lütfen bunun hakkında daha fazla bilgi verin.
DmitryBoyko

29
.AddObject yerine .Add kullanın
Dale Fraser,

9
EF 6'da .AddObject yerine .Add kullanırsınız
David

1
Harika cevap! varlık çerçevesini kullanarak nasıl okuyup yazılacağını gösterdiği için bunun için teşekkürler
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();

Yapmalı


7

[HttpPost] // düğme tıklama olayına mantık yazdığınızda kullanılır

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

herhangi bir sorgu bana
sorarsa

3

EF6 kullanıyorum ve tuhaf bir şey buluyorum,

Müşterinin parametresi olan kurucuya sahip olduğunu varsayalım,

kullanırsam new Customer(id, "name")ve yaparsam

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

Hatasız çalışıyor, ancak DataBase'e baktığımda, aslında verilerin EKLENMEDİĞİNİ görüyorum,

Ama küme parantezleri eklersem, kullan new Customer(id, "name"){}ve yap

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

veriler daha sonra gerçekten Eklenecek,

Görünüşe göre Curly Brackets fark yaratıyor, sanırım yalnızca Curly Brackets eklendiğinde varlık çerçevesi bunun gerçek bir somut veri olduğunu anlayacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.