你好,我的外键声明有问题。
App编译但由于错误我无法执行“添加迁移”:
“Equipment.Models.Device”类型的属性“TypeId”上的ForeignKeyAttribute无效。在依赖类型“Equipment.Models.Device”上找不到导航属性“DeviceDictionaryId”。 Name值应该是有效的导航属性名称
在这里您可以看到我的代码:
namespace Equipment.Models
{
public class Device
{
public int DeviceId { get;set; }
[Required]
[StringLength(14)]
public string DeviceUser { get; set; }
[ForeignKey("DeviceDictionaryId")]
public int TypeId { get; set; }
}
public class DeviceDBContext: DbContext
{
public DbSet<Device> Devices {get; set;}
}
}
和第二课:
namespace Equipment.Models
{
public class DeviceDictionary
{
public int DeviceDictionaryId { get; set; }
[Required]
public string DeviceManufacturer { get; set; }
[Required]
public string DeviceName { get; set; }
}
public class DeviceDictionaryDBContext : DbContext
{
public DbSet<DeviceDictionary> Dictionary { get; set; }
}
}
有人可以建议我需要编辑吗?
答案 0 :(得分:3)
您正在创建两个单独的DbContext
个对象。尝试只添加一个:
public class MyDbContext: DbContext
{
public DbSet<Device> Devices {get; set;}
public DbSet<DeviceDictionary> Dictionaries { get; set; }
}
Context必须引用两个类,以便它知道它们的存在。这样它就可以完成它的工作,即使用外键在这些类之间设置引用。
答案 1 :(得分:1)
试试这个......
namespace Equipment.Models
{
public class Device
{
public int DeviceId { get;set; }
[Required]
[StringLength(14)]
public string DeviceUser { get; set; }
[ForeignKey("DeviceDictionaryId")]
public int DeviceDictionaryId { get; set; }
}
public class DeviceDBContext: DbContext
{
public DbSet<Device> Devices {get; set;}
}
}
将属性命名为DeviceDictionaryId而不是TypeId,以允许EF约定完成其工作!
修改强>
刚看到另一个答案后你注意到你有两个单独的DBContext!
答案 2 :(得分:0)
我相信你需要改变
[ForeignKey("DeviceDictionaryId")]
public int TypeId { get; set; }
到
[ForeignKey("DeviceDictionary")]
public int TypeId { get; set; }
...换句话说,注释需要指定表而不是列。
正如其他人指出的那样,您只需要一个DBContext,每个表都有一个DbSet。