Asp.net mvc 3 EF延迟加载&;fluent API在表中创建附加字段
这是我的代码-首先,Asp.net mvc 3 EF延迟加载&;fluent API在表中创建附加字段,asp.net-mvc-3,entity-framework,lazy-loading,fluent,Asp.net Mvc 3,Entity Framework,Lazy Loading,Fluent,这是我的代码-首先,附件类: public class Attachment{ (...) public int UserId { get; set; } public virtual User Author { get; set; } public int? BasicMedicalDataId { get; set; } public virtual BasicMedicalData Medic
附件
类:
public class Attachment{
(...)
public int UserId { get; set; }
public virtual User Author { get; set; }
public int? BasicMedicalDataId { get; set; }
public virtual BasicMedicalData MedicalData { get; set; }
}
public class BasicMedicalData{
(..)
public virtual ICollection<Attachment> Attachments { get; set; }
}
以下是BasicMedicalData
class:
public class Attachment{
(...)
public int UserId { get; set; }
public virtual User Author { get; set; }
public int? BasicMedicalDataId { get; set; }
public virtual BasicMedicalData MedicalData { get; set; }
}
public class BasicMedicalData{
(..)
public virtual ICollection<Attachment> Attachments { get; set; }
}
它造成了奇怪的迁移:
public override void Up()
{
CreateTable(
"dbo.Attachments",
c => new
{
AttachmentId = c.Int(nullable: false, identity: true),
name = c.String(),
UserId = c.Int(nullable: false),
AddDate = c.DateTime(nullable: false),
BasicMedicalDataId = c.Int(),
del = c.Boolean(nullable: false),
BasicMedicalData_BasicMedicalDataId = c.Int(),
})
.PrimaryKey(t => t.AttachmentId)
.ForeignKey("dbo.Users", t => t.UserId, cascadeDelete: true)
.ForeignKey("dbo.PC_BasicMedicalData", t => t.BasicMedicalData_BasicMedicalDataId)
.ForeignKey("dbo.PC_BasicMedicalData", t => t.BasicMedicalDataId)
.Index(t => t.UserId)
.Index(t => t.BasicMedicalData_BasicMedicalDataId)
.Index(t => t.BasicMedicalDataId);
}
问题就在这里-它在数据库basicmedialdata\u basicmedialdataid
中创建了额外的字段,并在使用字段basicmedialdataid
的延迟加载中忽略
当我将手动ID放入BasicMedicalData\u BasicMedicalData
时,使用附件的延迟加载效果很好。但是我不能在这里用代码输入任何值,因为它不是Attachments
属性
如何解决?为什么它会用不同的名称创建两个相同的字段?为什么使用字段
BasicMedicalDataId
的延迟加载不起作用?您使用了WithMany()
重载,将关系配置为可选:许多在关系的另一侧没有导航属性,但在关系的另一侧确实有导航属性
试试这个:
modelBuilder.Entity<Attachment>()
//Attachment has an optional relationship with MedicalData
.HasOptional(u => u.MedicalData)
//It is many:optional with a navigation property named Attachments
.WithMany(d => d.Attachments)
//The dependent's foreign key is BasicMedicalDataId
.HasForeignKey(u => u.BasicMedicalDataId);
modelBuilder.Entity