如何初始化与另一个实体具有一对一关系的新对象,然后将该新对象添加到数据库中?

时间:2012-02-21 11:47:53

标签: .net entity-framework orm .net-4.0 entity-framework-4

我刚刚开始了解实体框架4,但仍然有一些我正在努力的事情,这个问题是最新的,我想知道是否有人会如此善良地指出我正确的方向?

我的模型中有许多相当简单的实体,但其中一个实体与另一个实体有一对一的关系,我似乎无法找到正确的事件序列来添加新的实例实体到数据库成功。

简化示例

我有学生实体,国籍实体和学生 与国籍有一对一的关系

我正在创建一个新的学生实体来添加到数据库和 如果没有首先设定国籍来满足,我就无法坚持下去 一对一的关系。

我的国籍是“未知”作为我在数据库中的国籍实体之一,我希望这是我的新学生记录的初始值。

如何创建新学生,创建对“未知”国籍实体的初始引用,然后将新学生记录添加到数据库中,使所有内容按正确顺序发生?

我只是使用与模型一起生成的标准类,我已经看过STE和POCO类型,但我决定退后一步,先学习基础知识。

1 个答案:

答案 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)

enter image description here

这里是插入的结果:

enter image description here

有关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