[英]Entity framework many to many
第一个模型
[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");
// });
}
问题是,当我检索交易平台对象时,我没有收到电子邮件,并返回错误消息:
'([(System.Data.Entity.DynamicProxies.DealingDesk_B97FADE5FCA3BA8DED564B236CAB94E3462E9228525392A5055AE860F8156F86)new System.Collections.Generic.Mscorlib_CollectionDebugView(dealingDesk).Items [1])。
也许我看错了吗?
当我尝试访问外键对象,而没有在查询结果序列上调用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将填充外键对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.