मैं SQL सर्वर 2012 डेटाबेस के विरुद्ध DbContext POCO दृष्टिकोण का उपयोग कर इकाई फ्रेमवर्क 4.3.1 का उपयोग कर रहा हूं।एक समय-समय पर नेविगेशन प्रॉपर्टी को लोड होने से क्यों रोकें?
मैं डेटाबेस में सिर्फ दो टेबल है और वे इस तरह दिखेगा:
नोट: कोई विदेशी बिल्कुल डेटाबेस में निर्दिष्ट की गई कुंजियों रहे हैं - मैं केवल इन रिलेशनशिप को लागू कर रहा हूँ मॉडल (मैं डेटाबेस नहीं बदल सकता)।
वे एक उन में डेटा की एक पंक्ति है कि इस तरह दिखता है: अब
:
मैं में शामिल होने के लिए काम करेंगे सुनिश्चित करने के लिए निम्न क्वेरी प्रदर्शन किया , मेरे पास निम्नलिखित संस्थाएं हैं:
public class Two
{
public long TwoId { get; set; }
public string OneId { get; set; }
public virtual One One { get; set; }
}
public class One
{
public string OneId { get; set; }
public DateTime DeliveryDate { get; set; }
public virtual ICollection<Two> Twos { get; private set; }
public void AddTwo(Two two)
{
if (two == null)
throw new ArgumentNullException("two");
if (Twos == null)
Twos = new List<Two>();
if (!Twos.Contains(two))
Twos.Add(two);
two.One = this;
}
}
और इस संदर्भ है: जब मैं कोड के इस बिट मैं अपने कंसोल के लिए मुद्रित Why is this printed?
मिल चलाने
public class TestContext : DbContext
{
public TestContext(string conectionString)
: base(conectionString)
{
Configuration.LazyLoadingEnabled = true;
Ones = Set<One>();
Twos = Set<Two>();
}
public DbSet<One> Ones { get; private set; }
public DbSet<Two> Twos { get; private set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
var one = modelBuilder.Entity<One>();
one.ToTable("One");
one.HasKey(d => d.OneId);
var two = modelBuilder.Entity<Two>();
two.ToTable("Two");
two.HasKey(d => new
{
d.OneId,
d.TwoId
});
two.Property(p => p.TwoId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
two.HasRequired(t => t.One)
.WithMany(o => o.Twos)
.HasForeignKey(o => o.OneId);
base.OnModelCreating(modelBuilder);
}
}
- जो मैं के रूप में आप देख सकते हैं कि नेविगेशन संपत्ति (मैं में भरा जाना चाहिए की उम्मीद नहीं है यहां तक कि स्पष्ट रूप से इसे शामिल है):
using (var ctx = new TestContext(@"......"))
{
const string oneId = "111348718";
var one = ctx.Ones.Single(o => o.OneId.Equals(oneId));
if (one != null)
{
var sdi = ctx
.Twos
.Include(s => s.One)
.Single(s => s.OneId.Equals(oneId));
if (sdi.One == null)
{
Console.WriteLine("Why is this printed?");
}
else
{
Console.WriteLine("This is what I expect");
}
}
}
अब, यह वास्तव में अजीब सा है: यदि मैं बस One
वर्ग यह ठीक काम करता है से DeliveryDate
संपत्ति बाहर टिप्पणी (मैं This is what I expect
मुद्रित टी मिल ओ कंसोल)।
यहां क्या गलत है और मैं इसे कैसे हल कर सकता हूं?
नोट: अगर मैं one
चर इसे सही ढंग से उम्मीद मान पर सेट कर दिया गया है पर DeliveryDate
संपत्ति को देखो तो तारीख डेटाबेस में ठीक होना चाहिए और इकाई की रूपरेखा पूरी तरह से यह अमल में लाना करने में सक्षम है।
अधिक जानकारी: तथ्य यह है कि यह एक तारीख है बात नहीं है - अगर ऐसा है, का कहना है कि एक nvarchar यह अभी भी विफल रहता है - किसी भी सरल संपत्ति पर गिर पूरी बात का कारण बनता है लगता है - यह करने के लिए एक बग की तरह लगता है मुझे ...