码迷,mamicode.com
首页 > 其他好文 > 详细

Configure One-to-One(配置一对一关系)【Code-First系列】

时间:2015-12-13 16:55:41      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

现在,开始学习怎么配置一对一的关系,众所周知,一对一的关系是:一个表中的主键,在另外一个表中,同时是主键和外键【实际上是一对零或者一对一】。

请注意:一对一的关系,在MS SQL Server中,技术上是不可能实现的,主要还是一对零或者一对一的关系。

想了解更多的实体关系,请看MSDN,这里面讲解的很详细。----->>>Entity Relationship

一、使用数据注解特性,来配置一对一(一对零)的关系。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EF5
{
   public class Student
    {
       public int StudentID { get; set; }

       public string StudentName { get; set; }

       public virtual StudentAddress StudentAddress { get; set; }
    }
}
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;

namespace EF5
{
   public class StudentAddress
    {
       //ForeignKey属性里面的参数填写的是导航属性。
       [Key, ForeignKey("Student")]
       public int StudentID { get; set; }

       public string Address1 { get; set; }

       public string Address2 { get; set; }
       public string City { get; set; }
       public int Zipcode { get; set; }
       public string State { get; set; }
       public string Country { get; set; }

       public virtual Student Student { get; set; }
    }
}
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EF5
{
   public class DbContextClass:DbContext
    {
       public DbContextClass() : base("ConnectionString") 
       {
           Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DbContextClass>());
       }

       public DbSet<Student> Students { get; set; }
       public DbSet<StudentAddress> StudentAddresses { get; set; }

       
    }
}

 

得到的数据库:

技术分享

请注意,在上面的代码中,Student实体中,我没有做任何事情,然后Code-First默认约定,就将StudentID作为表的主键,然后在StudentAddress实体中,我特别指定了Key和ForeignKey特性,为了标注StudentId既是主键又是外键。在ForeignKey特性中,我指定了Student实体参数,所以就构成了一对一的关系。

当然我们可以使用Fluent API来配置一对一的关系:

使用Fluent APi来配置一对一(一对零)的关系

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EF5
{
   public class DbContextClass:DbContext
    {
       public DbContextClass() : base("ConnectionString") 
       {
           Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DbContextClass>());
       }

       public DbSet<Student> Students { get; set; }
       public DbSet<StudentAddress> StudentAddresses { get; set; }

       protected override void OnModelCreating(DbModelBuilder modelBuilder)
       {
           //配置表的主键
           modelBuilder.Entity<StudentAddress>().HasKey(s => s.StudentID);

           //配置表的外键
           modelBuilder.Entity<StudentAddress>().HasRequired(s => s.Student).WithOptional(p=>p.StudentAddress);
           
           base.OnModelCreating(modelBuilder);
       }

       
    }
}

技术分享

请注意:下面的代码,写法有错误,弄反了!!!

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EF5
{
   public class DbContextClass:DbContext
    {
       public DbContextClass() : base("ConnectionString") 
       {
           Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DbContextClass>());
       }

       public DbSet<Student> Students { get; set; }
       public DbSet<StudentAddress> StudentAddresses { get; set; }

       protected override void OnModelCreating(DbModelBuilder modelBuilder)
       {
           //配置表的主键
           modelBuilder.Entity<StudentAddress>().HasKey(s => s.StudentID);

           //配置表的外键
          // modelBuilder.Entity<StudentAddress>().HasRequired(s => s.Student).WithOptional(p=>p.StudentAddress);
           modelBuilder.Entity<StudentAddress>().HasOptional(s => s.Student).WithRequired(p => p.StudentAddress);

           base.OnModelCreating(modelBuilder);
       }

       
    }
}

这样得到的数据库是:

技术分享

 

后面的一节中将学到,怎么配置一对多的关系。

 

 

附上系列目录:

 

Configure One-to-One(配置一对一关系)【Code-First系列】

标签:

原文地址:http://www.cnblogs.com/caofangsheng/p/5042843.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!