2012-01-12 13 views
54

Entity Framework modelini kullanarak veritabanımda bazı veriler eklemeye çalışıyorum, ancak bilinmeyen bazı nedenlerden dolayı, hiçbir şey yapmıyor.Entity Framework modelini kullanarak veri ekleme

Burada bir şey mi özlüyorum?

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

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

+5

Kod İlk? İlk model mi? Bir şey saklamıyor mu, yoksa saklamıyor mu? SQL Profiler ne diyor? Veritabanına gönderilen bir şey var mı? –

cevap

69

Olmalıdır:

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 sonra, Orders ise: Örneğin

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

: Burada

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

canlı örnektir:

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

Herhangi bir AddObject yöntemim yok. – Rocshy

+0

@Dennis Traub Modelinizden size sordu. Lütfen bu konuda daha fazla bilgi verin. –

+0

Kırılmaz. Hiçbir şey saklamıyor. Masamın içeriğini listelemede sorunum yok. Üzgünüm, bu konuda yeniyim, SQL Profiler kullanmıyorum. Benim modelimin 2 sütunlu bir tablosu var. – 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 o

+0

Mükemmel, teşekkürler! – taiar

4

ben Ef6 kullanıyorum

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

Herhangi bir sorunuz varsa bana sor –

2

düğmesinin click olayı üzerinde mantığı yazmak ve ben garip bir şey bulduğunuzda [HttpPost] // kullanmak,

varsayalım Müşteri ile Oluşturucu sahip do parametresi,

Ben new Customer(id, "name") kullanın ve eğer

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

ben

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

t hatasız üzerinden çalışmasını ama Veritabanına baktığımda, veri eklenemez mi gerçeği bulmak,

Ama süslü parantez eklerseniz, new Customer(id, "name"){} kullanmak ve yapmak veriler daha sonra eklenecek,

Curly Braketler fark yaratır gibi görünüyor, Ben sadece Kıvrımlı Parantez eklediğinizde, varlık çerçevesi bu gerçek bir beton veri olduğunu kabul edecektir.