如何解决如何定义应使用哪个外键导航属性?
我有两个模型课
public class Registration
{
// PK
public int Id { get; private set; }
// FK's
public string AspNetUsersId { get; private set; }
public int TiMetableId { get; private set; }
// EF Navigation properties
public TiMetable TiMetable { get; set; }
public ApplicationUser ApplicationUser { get; set; }
// EF ctor
private Registration()
{
}
// public ctor
public Registration(string aspNetUsersId,int tiMetableId)
{
AspNetUsersId = aspNetUsersId;
TiMetableId = tiMetableId;
}
}
ApplicationUser
public class ApplicationUser : IdentityUser
{
// some not relevant columns
}
当我尝试执行此代码时
var registrationExists = _context.Registrations
.Where(x => x.AspNetUsersId == user.Id
&& x.TiMetableId == tiMetable.Id)
.SingleOrDefault();
我遇到错误
Microsoft.Data.sqlClient.sqlException:'无效的列名 “ ApplicationUserId”。
我认为这是因为EF由于具有Registration.ApplicationUserId
导航属性,因此EF试图在默认情况下在数据库中找到ApplicationUser
列。但是属性(和sql列)被命名为AspNetUsersId
,而不是ApplicationUserId
。如何在模型构建器(dbContext)中覆盖此命名?
我尝试过类似的事情
modelBuilder.Entity<Registration>(b =>
{
b.HasAlternateKey(x => x.AspNetUsersId);
b.HasOne(n => n.ApplicationUser);
});
但是我不知道如何将它们映射在一起。
解决方法
您可以在字段上写注释,例如
// PK
[Key]
public int Id { get; private set; }
// FK's
[ForeignKey(nameof(AspNetUsersId))]
public string AspNetUsersId { get; private set; }
[ForeignKey(nameof(TimetableId ))]
public int TimetableId { get; private set; }
现在,[key]属性是主键,[ForeignKey()]属性是FK。
您还可以使用modelBuilder:
modelBuilder.Entity<Registration>(
.HasAlternateKey(x => x.AspNetUsersId)
.HasOne(n => n.ApplicationUser)
.WithMany()
.HasForeignKey(f => f.AspNetUsersId);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。