我刚刚开始了解实体框架4,但仍然有一些我正在努力的事情,这个问题是最新的,我想知道是否有人会如此善良地指出我正确的方向?
我的模型中有许多相当简单的实体,但其中一个实体与另一个实体有一对一的关系,我似乎无法找到正确的事件序列来添加新的实例实体到数据库成功。
简化示例
我有学生实体,国籍实体和学生 与国籍有一对一的关系
我正在创建一个新的学生实体来添加到数据库和 如果没有首先设定国籍来满足,我就无法坚持下去 一对一的关系。
我的国籍是“未知”作为我在数据库中的国籍实体之一,我希望这是我的新学生记录的初始值。
如何创建新学生,创建对“未知”国籍实体的初始引用,然后将新学生记录添加到数据库中,使所有内容按正确顺序发生?
我只是使用与模型一起生成的标准类,我已经看过STE和POCO类型,但我决定退后一步,先学习基础知识。
答案 0 :(得分:0)
不知道您使用EF的“味道”。以下是使用EF Code First的方法: 首先是你的实体:
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public virtual Nationality Nationality { get; set; }
}
public class Nationality
{
public int Id { get; set; }
public string Name { get; set; }
}
在这种情况下,关系非常简单,您不需要任何EntityTypeConfiguration。 您可以按以下顺序添加记录:
var nationalities = new List<Nationality>(){new Nationality(){Name ="Italian"},
new Nationality(){Name ="British"},
new Nationality(){Name ="American"}};
nationalities.ForEach(x => context.Nationality.Add(x));
context.SaveChanges();
//retrieve the nationality from the context
var italianNationality = context.Nationality.Where(x => x.Name == "Italian").First();
//create the student and assign a nationality
var student = new Student() { Name = "Giorgio", Nationality = italianNationality };
context.Students.Add(student);
context.SaveChanges();
这是你的表格结构(学生表包含国籍的FK)
这里是插入的结果:
有关Code First的更多信息,请点击此处: http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx 在这里:http://blogs.msdn.com/b/adonet/archive/2011/09/28/ef-4-2-code-first-walkthrough.aspx