如何仅通过其ID保存外键?

时间:2016-09-12 07:07:23

标签: c# entity-framework

我有一个简洁的类型:

public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual TestList MyList { get; set; }
public int MyListID { get; set; }

TestList只有ID和Name - 没有别的。

然后我有一个创建视图,它将测试列表枚举到一个下拉列表中,我看到正确的ID成功传递回控制器。

我的问题是,当我尝试通过以下方式将ViewModel映射到后端模型时:

prop.MyListID = model.MyListID;

然后我在prop中遇到MyList null时出现错误。

我确信我可以通过prop.MyList = db.TestList.find(model.MyListID);进行修复,但这似乎浪费了数据库查询。

我可以从图表视图中看到外键是正确的并且MyListID被用作FK,但是,我只是无法弄清楚如何仅使用ID。

有人可以提供建议吗?

对这个问题的第一种类型错误的猜测 - 犯了一个愚蠢的错误。

1 个答案:

答案 0 :(得分:1)

您创建了一对多关系(因为您使用virtual ICollection<TestList>),现在EF创建新的一个表来映射此关系,并且您在MyList属性中获得了许多ID,您可以添加属性{{1 }到您的List属性,或使用Fluent Api映射它:

[ForeignKey("MyListID")]

然后您可以获取列表protected override void OnModelCreating(DbModelBuilder modelBuilder) { //one-to-many modelBuilder.Entity<Entity>() .HasRequired<TestList>(s => s.TestList) // This is navigational property (virtual) .WithMany(s => s.MyList); //this is your list }

详细了解那里的一对多关系 - http://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-first.aspx