CodeFirst配置外键,配置关系 电脑版发表于:2020/6/9 17:37 ####一:直接利用导航属性生成外键 DBFIrst是外键生成的导航属性,反过来如果用code first可以根据导航属性来生成外键 缺点:不是很灵活,外键只在数据库有,模型里边没有,所以这种情况做添加的时候不能直接赋值,只能通过导航属性来间接添加外键(因为外键是通过导航属性维护的),做join查询的时候根本没法点出外键字段,链接查询只能通过导航属性。 当然你可以把字段名字写成和导航属性生成的外键名重名,这样也可以巧妙的做到model里边用到外键 <br/> ####二:利用ForeignKey特性配置外键(也是需要配合导航属性的) 这样就可以自己去维护外键字段,也就是模型中有外键,添加的时候可以直接添加,join可以点出来自己的字段 两种做法 1: ForeignKey配置到外键上,这个时候名字要写成导航属性的名字 ``` [ForeignKey("userinfo")] public int UserId { get; set; } public virtual UserInfo userinfo { get; set; } ``` 2: ForeignKey配置导航属性上面,这个时候名字写成外键的名字 ``` public int UserId { get; set; } [ForeignKey("UserId")] public virtual UserInfo userinfo { get; set; } ``` tn> 注意这个是属性不是字段!,要加get,set可能会因为很久没有用,就忘记了,写成字段了,这样就不行了。 <br/> ####三:Fluent API,在重写OnModelCreating方法通过lamdba来配置 1:先配置多的一方(按照多对一方式来配置) modelBuilder.Entity<Pet>().HasRequired(a => a.userinfo).WithMany(a => a.pets).HasForeignKey(a => a.UserId); 2:先配置一的一方(按照一对多方式来配置,相当于就是换个顺序) modelBuilder.Entity<UserInfo>().HasMany(a => a.pets).WithRequired(a => a.userinfo).HasForeignKey(a => a.UserId); 项目下载地址:https://download.tnblog.net/resource/index/50a5130aab0c421a8f60ed038143ffbb