मैं थोड़ा स्टंप हूं। मैंने जो कुछ पढ़ा है, उससे डीबीसीएन्टेक्स्ट.एटोडेटेक्ट चेंज को गलत पर सेट करने से परिवर्तन ट्रैकिंग को अक्षम करना चाहिए, जिसे डेटाबेस में भेजे जाने वाले परिवर्तनों की पहचान करने के लिए DbContext.DetectChanges को कॉल करने की आवश्यकता होती है।DbContext AutoDetectChangesEnabled को झूठी पहचान करने के लिए सेट
हालांकि, यह नीचे मेरे लॉग से स्पष्ट है कि परिवर्तन dbContexts द्वारा ट्रैक किया जा रहा है, यहां तक कि सेटिंग को झूठी सेट के साथ भी बदल दिया जा रहा है।
क्या मुझे कुछ याद आ रही है?
इकाई की रूपरेखा संस्करण: 5.0.0.0
DbContext वर्ग
public class ProjectContext : DbContext {
public DbSet<Project> Projects {get;set;}
}
नियंत्रक वर्ग
private ProjectContext db = new ProjectContext();
public method(){
Project p = new Project("uniqueName");
db.Configuration.AutoDetectChangesEnabled = false;
db.Projects.Add(p);
DebugChangeTracker();
db.SaveChanges();
db.Projects.First().ProjectName = "a differentName!";
DebugChangeTracker();
db.SaveChanges();
}
लॉगिंग विधि
private void DebugChangeTracker()
{
var path = "C:\\mypath\\";
path = path + Util.GetMsSinceEpoch().ToString() + "changeTracker.log";
using (StreamWriter sw = new StreamWriter(path))
{
var changeTracker = db.ChangeTracker;
var entries = changeTracker.Entries();
foreach (var x in entries)
{
var name = x.Entity.ToString();
var state = x.State;
sw.WriteLine("");
sw.WriteLine("***Entity Name: " + name +
"is in a state of " + state);
var currentValues = x.CurrentValues;
sw.WriteLine("***CurrentValues***");
PrintPropertyValues(currentValues,sw);
if (state != EntityState.Added)
{
sw.WriteLine("***Original Values***");
PrintPropertyValues(x.OriginalValues,sw);
}
}
}
}
पहले लॉग
***Entity Name: Models.Projectis in a state of Added
***CurrentValues***
ProjectId:0
ProjectName:uniqueName
दूसरा लॉग
***Entity Name: Models.Projectis in a state of Modified
***CurrentValues***
ProjectId:1
ProjectName:uniqueName
***Original Values***
ProjectId:1
ProjectName:a differentName!
मुझे लगता है कि कुछ समय से अधिक पढ़ने के लिए था, लेकिन उत्तर देने में सहायता करता है मेरी सवाल थोड़ा सा, धन्यवाद! कॉपी और पेस्ट त्रुटि के बारे में खेद है; मैं जनसंख्या के लिए सवाल अद्यतन करूंगा। – Jesse
दुर्भाग्यवश, "एक लूप में थोक जोड़ना इकाइयां", जब आप परिवर्तन ट्रैकिंग अक्षम करना चाहते हैं। यह _massive_ speedup (1 का नमूना आकार, मेरे ऐप में परीक्षण किया गया है, लेकिन यह ~ 3000 पंक्तियों को जोड़कर दो रनों के बीच एकमात्र अंतर था)। –
@EdS .: थोक जोड़ना "सबसे सरल चीजों" में से एक है जिसका अर्थ है कि मैं वास्तव में * स्वचालित परिवर्तन पहचान अक्षम कर दूंगा। – Slauma