第一个模型
[Table("Blotter.DealingDesk")]
public partial class DealingDesk
{
public DealingDesk()
{
DealingStatus = new HashSet<DealingStatus>();
}
public int DealingDeskId { get; set; }
[Required]
[StringLength(50)]
public string Country { get; set; }
[Required]
[StringLength(50)]
public string DealingDeskCode { get; set; }
public virtual ICollection<DealingStatus> DealingStatus { get; set; }
}
第二种模式
[Table("Blotter.EmailAddress")]
public partial class EmailAddress
{
public EmailAddress()
{
LUDealingDeskEmails = new HashSet<LUDealingDeskEmail>();
}
[Key]
public int EmailId { get; set; }
[Required]
[StringLength(150)]
public string Email { get; set; }
public virtual ICollection<LUDealingDeskEmail> LUDealingDeskEmails { get; set; }
}
第三模型(查找表为POCO)
[Table("Blotter.LUDealingDeskEmail")]
public partial class LUDealingDeskEmail
{
public int LUDealingDeskEmailId { get; set; }
public int FK_EmailId { get; set; }
public int FK_DealingDeskId { get; set; }
public virtual DealingDesk DealingDesk { get; set; }
public virtual EmailAddress EmailAddress { get; set; }
}
public partial class MCUtilityContext : DbContext
{
public MCUtilityContext()
: base("name=MCUtilityContext")
{
Database.SetInitializer<CapstoneInterfaceContext>(null);
Configuration.ProxyCreationEnabled = true;
Configuration.LazyLoadingEnabled = true;
}
public virtual DbSet<DealingDesk> DealingDesks { get; set; }
public virtual DbSet<DealingStatus> DealingStatus { get; set; }
public virtual DbSet<EmailAddress> EmailAddresses { get; set; }
public virtual DbSet<LUDealingDeskEmail> LUDealingDeskEmails { get; set; }
public virtual DbSet<ApplicationError> ApplicationErrors { get; set; }
public virtual DbSet<Connection> Connections { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<DealingDesk>()
.HasKey(k => k.DealingDeskId);
modelBuilder.Entity<DealingStatus>()
.HasKey(k => k.DealingStatusId)
.HasRequired(e => e.DealingDesk)
.WithMany( s => s.DealingStatus)
.HasForeignKey( s => s.DealingDeskId)
.WillCascadeOnDelete(false);
//modelBuilder.Entity<DealingDesk>()
// .HasMany(a => a.EmailAddress)
// .WithMany(b => b.)
// .Map(m =>
// {
// m.MapLeftKey("DealingDeskId");
// m.MapRightKey("EmailId");
// m.ToTable("LUDealingDeskEmail", "Blotter");
// });
//modelBuilder.Entity<DealingDesk>()
// .HasMany<EmailAddress>(s => s.EmailAddress)
// .WithMany(c => c.DealingDesk)
// .Map(cs =>
// {
// cs.MapLeftKey("FK_DealingDeskId");
// cs.MapRightKey("FK_EmailId");
// cs.ToTable("Blotter.LUDealingDeskEmail");
// });
}
问题是当我检索交易台对象时,我没有收到回复的电子邮件,上面写着错误说:
&#39;((System.Data.Entity.DynamicProxies.DealingDesk_B97FADE5FCA3BA8DED564B236CAB94E3462E9228525392A5055AE860F8156F86) 新 。System.Collections.Generic.Mscorlib_CollectionDebugView(dealingDesk).Items [1])EmailAddress的&#39; 抛出了类型的例外 &#39; System.Data.Entity.Core.EntityCommandExecutionException&#39;
也许我在看这个错误?
答案 0 :(得分:0)
当我尝试访问外键对象时,我没有在查询结果序列上调用ToList()时出现此错误。这是一个例子:
class ForeignKeyObject
{
public int Id{get;set;}
}
class Entity
{
public int Id{get;set;}
public ForeignKeyObj KeyObj{get;set;}
}
以下是重现错误的代码:
var entities = (from e in _db.Entities
where e.Id== 1
select e).ToList();
foreach( var e in entities )
Debug.WriteLine(e.KeyObj.Id.ToString());
如果将删除ToList()调用,则错误将在Debug.WriteLine()行中显示出来。将其添加回来,EF将填充外键对象。