Rye*_*Guy 56 c# asp.net entity-framework entity-framework-core
您好我正在创建Web应用程序,并且已经安装了Microsoft.entityFrameworkCore和Microsoft.entityFrameworkCore.Tools.
在包管理器控制台中执行添加迁移的过程中,我收到错误
" System.InvalidOperationException:实体类型'Attends'具有使用数据注释定义的复合主键.要设置复合主键,请使用流畅的API "
这是我在实体文件夹中的代码.
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Threading.Tasks;
namespace _3241_farmDb.Entities
{
public class Farm
{
[Required, MaxLength(30)]
[Key]
public string FarmName { get; set; }
[Required, MaxLength(15)]
public string FarmCity { get; set; }
[Required, MaxLength(9)]
public string FarmerSSN { get; set; }
}
public class Farmer
{
[Required, MaxLength(9)]
[Key]
public int SS { get; set; }
[Required, MaxLength(9)]
public string Fname { get; set; }
[Required, MaxLength(15)]
public string Lname { get; set; }
[Required, MaxLength(15)]
public string CityName { get; set; }
[Required, MaxLength(15)]
public string Address { get; set; }
[Required, MaxLength(30)]
public string BoardPositionName { get; set; }
}
public class Child
{
[Required, MaxLength(9)]
[Key]
public int FarmerSS { get; set; }
[Required, MaxLength(15)]
[Key]
public string Fname { get; set; }
[Required, MaxLength(15)]
[Key]
public string Lname { get; set; }
[Required]
public int Age { get; set; }
}
public class Attends
{
[Key, Column(Order = 1)]
public int FarmerSS { get; set; }
[Key, Column(Order = 2)]
public int HotelID { get; set; }
[Required, MaxLength(15)]
public string BoardPosition { get; set; }
}
public class Livestock
{
[Required, MaxLength(15)]
public int LivestockID { get; set; }
[Required, MaxLength(15)]
public string LivestockType { get; set; }
}
public class Farm_Houses
{
[Required, MaxLength(15)]
[Key]
public int LivestockID { get; set; }
[Required, MaxLength(15)]
public string FarmName { get; set; }
}
public class Crops
{
[Required, MaxLength(15)]
[Key]
public int CropID { get; set; }
[Required, MaxLength(15)]
public string CropName { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
如何调整它以正确设置复合键?
Sam*_*ath 132
在EF核心..
复合键只能使用Fluent API进行配置 - 约定永远不会设置复合键,也不能使用Data Annotations来配置复合键.
这是Fluent API版本:
注意:这只是一个例子.请根据您的使用情况进行调整.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Attends>()
.HasKey(c => new { c.FarmerSS, c. HotelID });
}
Run Code Online (Sandbox Code Playgroud)
你可以在这里阅读更多相关信息:复合键