मैं SQL सर्वर 2012 डेटाबेस के विरुद्ध इकाई फ्रेमवर्क 4.3.1 का उपयोग कर रहा हूं और मैं पॉको दृष्टिकोण का उपयोग कर रहा हूं। मैं निम्न त्रुटि हो रही है और यदि कोई इसे ठीक करने की व्याख्या कर सकते मैं सोच रहा हूँ:कैसे ठीक करें: रिश्ते की बाधा में निर्भर और प्रिंसिपल भूमिकाओं में संपत्तियों की संख्या समान होनी चाहिए?
ModelValidationException मॉडल पीढ़ी के दौरान
एक या अधिक सत्यापन त्रुटियों का पता चला गया: \ tSystem.Data .Entity.Edm.EdmAssociationConstraint:: रिश्ते की बाधा में निर्भर और प्रिंसिपल भूमिकाओं में गुणों की संख्या समान होना चाहिए।
कोई और जानकारी के लिए कोई InnerException
उपलब्ध नहीं है।
मैं डेटाबेस स्कीमा बदल सकते हैं नहीं है और यह एक छोटे से अजीब है, लेकिन यहाँ यह है ...
- ** हैं प्राथमिक कुंजी (नोटिस मैं समग्र प्राथमिक कुंजी)
- (FK) इंगित करता है एक विदेशी कुंजी
यहाँ टेबल हैं (अगर यह मदद करता है मैं एसक्यूएल पोस्ट उन्हें उत्पन्न करने के लिए कर सकते हैं, लेकिन मुझे नहीं लगता कि टेबल वास्तव में समस्या के रूप में अपवाद मॉडल के सत्यापन में है):
public class Three
{
public int ThreeId { get; set; }
public string Name { get; set; }
public virtual ICollection<Two> Twos { get; private set; }
public virtual ICollection<One> Ones { get; private set; }
public void AddOne(One one)
{
if (one == null)
throw new ArgumentNullException("two");
if (Ones == null)
Ones = new List<One>();
if (!Ones.Contains(one))
Ones.Add(one);
one.Three = this;
}
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.Three = this;
}
}
public class Two
{
public int TwoId { get; set; }
public int ThreeId { get; set; }
public string Name { get; set; }
public virtual Three Three { get; set; }
public virtual ICollection<One> Ones { get; private set; }
public void AddOne(One one)
{
if (one == null)
throw new ArgumentNullException("two");
if (Ones == null)
Ones = new List<One>();
if (!Ones.Contains(one))
Ones.Add(one);
one.Two = this;
}
}
public class One
{
public int OneId { get; set; }
public int TwoId { get; set; }
public int ThreeId { get; set; }
public virtual Two Two { get; set; }
public virtual Three Three { get; set; }
}
और यहाँ डेटा संदर्भ है::
public class DbCtx : DbContext
{
public DbCtx(string connectionString)
: base(connectionString)
{
Ones = Set<One>();
Twos = Set<Two>();
Threes = Set<Three>();
}
public DbSet<One> Ones { get; private set; }
public DbSet<Two> Twos { get; private set; }
public DbSet<Three> Threes { get; private set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
var one = modelBuilder.Entity<One>();
one.ToTable("One");
one.HasKey(d => new
{
d.OneId,
d.TwoId,
d.ThreeId
});
one.Property(d => d.OneId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
one.HasRequired(t => t.Two)
.WithMany(s => s.Ones)
.HasForeignKey(t => t.TwoId);
one.HasRequired(t => t.Three)
.WithMany(s => s.Ones)
.HasForeignKey(t => t.ThreeId);
var two = modelBuilder.Entity<Two>();
two.ToTable("Two");
two.HasKey(d => new
{
d.TwoId,
d.ThreeId
});
two.Property(p => p.TwoId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
two.HasRequired(t => t.Three)
.WithMany(s => s.Twos)
.HasForeignKey(t => t.ThreeId);
var three = modelBuilder.Entity<Three>();
three.ToTable("Three");
three.HasKey(s => s.ThreeId);
three.Property(p => p.ThreeId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
base.OnModelCreating(modelBuilder);
}
}
One
-
**OneId int not null
**TwoId int not null (FK)
**ThreeId int not null (FK)
Name nvarchar(50) not null
Two
-
**TwoId int not null
**ThreeId int not null (FK)
Name nvarchar(50) not null
Three
-
**ThreeId not null
Name nvarchar(50) not null
यहाँ संस्थाओं (है कि मैं मॉडल में विदेशी कुंजी शामिल कर रहा हूँ नोटिस लेकिन वह सुंदर मानक के अलावा अन्य) कर रहे हैं अंत में, यह अपवाद का कारण बनने के लिए कोड का एक स्निपेट है:
using (var ctx = new DbCtx(@"....."))
{
Console.WriteLine(ctx.Twos.Count());
}
ग्रेट, धन्यवाद - मैं थोड़ी देर के लिए उसके सिर पर टक्कर लगी थी! – kmp