【发布时间】:2017-10-05 19:03:31
【问题描述】:
我正在与具有一对多关系的两个实体 County 和 Patient 合作。
public class County
{
public int CountyId { get; set; } // Primary Key
public string CountyName { get; set; ) // A unique index column
public virtual ICollection<Patient> Patients { get; set; }
}
public class CountyMap : EntityTypeConfiguration<County>
{
public CountyMap()
{
ToTable("Counties");
HasKey(c => c.CountyId);
Property(c => c.CountyId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(c => c.CountyName).IsRequired().HasMaxLength(50).HasColumnAnnotation("Index",
new IndexAnnotation(new IndexAttribute("IX_Counties", 1) { IsUnique = true }));
}
}
public class Patient
{
public int PatientId { get; set; }
public string PatientLastName { get; set; }
public string PatientFirstName { get; set; }
public string CountyName { get; set; }
public int CountyId { get; set; } // Foreign key to Counties table
public virtual County County { get; set; } // Navigation property
}
public class PatientMap: EntityTypeConfiguration<Patient>
{
public PatientMap()
{
ToTable("Patients");
HasKey(p => p.PatientId);
Property(p => p.PatientId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(p => p.PatientLastName).IsRequired().HasMaxLength(50);
Property(p => p.PatientFirstName).IsRequired().HasMaxLength(50);
Property(p => p.CountyId).IsRequired();
HasRequired(p => p.County).WithMany(c => c.Patients).HasForeignKey(p => p.CountyId);
}
}
public class AppContext : DbContext
{
public AppContext()
: base("name=AppContext")
{
}
public virtual DbSet<County> Counties { get; set; }
public virtual DbSet<Patient> Patients { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new CountyMap());
modelBuilder.Configurations.Add(new PatientMap());
}
}
public class PatientUOW
{
public Patient CreatePatient(Patient patient)
{
string errorMessage = String.Empty;
Patient patientReturned = null;
County county = null;
try
{
using (AppContext ctx = new AppContext())
{
// ONLY Pre-existing counties are permitted
county = ctx.Counties.Where(c => c.CountyName == patient.CountyName).SingleOrDefault<County>();
county.Patients.Add(patient);
ctx.SaveChanges(); // An exception is thrown here
}
}
catch (Exception err)
{
}
}
}
异常信息是:
违反了多重性约束。的角色“Patient_County_Target” 'ArielOperations.Domain.Concrete.Patient_County' 的关系有 多重性 1 或 0..1。
County 实体上的调试器显示:
谁能解释这里发生了什么?我在这里和其他地方看到了几个条目,但似乎没有一个有效。
谢谢。
【问题讨论】:
-
为什么
Patient有CountyName?这是多余的。
标签: c# entity-framework code-first