AspNetUser 上的实体框架流利的 api 1:1 属性无法更改 Account_Id 属性
Posted
技术标签:
【中文标题】AspNetUser 上的实体框架流利的 api 1:1 属性无法更改 Account_Id 属性【英文标题】:Entity framework fluent api 1:1 property on AspNetUser to other table cannot change Account_Id property 【发布时间】:2018-03-23 03:08:39 【问题描述】:我正在使用 fluent api 为我的实体数据库设置关系。我有典型的 AspNetUsers 表,该表有一个名为 Id (String) 的列,它是表的主键。我扩展了 IdentityUser 并赋予它其他属性,2 个这样的属性是 AdvisorProfile 和 StudentProfile。
ApplicationUser 具有可选的 AdvisorProfile 和 StudentProfile。 AdvsiorProfile 和 StudentProfile 具有必需的帐户 (ApplicationUser)。
我的问题是,当表格生成时,AdvisorProfile 有一个名为 Account_Id 的属性,它是指向 AspNetUser 表格中 ApplicationUser 的链接。我想更改该命名约定,但我流畅的 api 代码似乎没有什么不同。
Fluent Api for Account -> 顾问/账户外键命名
//Advisor Profile to Login Account
modelBuilder.Entity<ApplicationUser>().HasOptional(x => x.AdvisorProfile).WithRequired(x => x.Account).Map(x => x.MapKey("AdvisorFK"));
modelBuilder.Entity<ApplicationUser>().HasOptional(x => x.AdvisorProfile).WithRequired(x => x.Account).WillCascadeOnDelete(false);
modelBuilder.Entity<Advisor>().HasRequired<ApplicationUser>(x => x.Account).WithOptional(x => x.AdvisorProfile).Map(x => x.MapKey("AccountFK"));
modelBuilder.Entity<Advisor>().HasRequired<ApplicationUser>(x => x.Account).WithOptional(x => x.AdvisorProfile).WillCascadeOnDelete(false);
表格生成代码:
CreateTable(
"dbo.Advisors",
c => new
Id = c.Long(nullable: false, identity: true),
FirsName = c.String(),
LastName = c.String(),
MiddleName = c.String(),
Email = c.String(),
PhoneNumber = c.String(),
PrimaryContact = c.Int(nullable: false),
Account_Id = c.String(nullable: false, maxLength: 128),
)
.PrimaryKey(t => t.Id)
.ForeignKey("dbo.AspNetUsers", t => t.Account_Id) //Here is the issue
.Index(t => t.Account_Id);
【问题讨论】:
【参考方案1】:问题是您为一个相同的关系使用了多个流畅的配置,这很容易出错并且很难说哪个真正适用。
根据经验,始终对每个关系使用单一流畅的映射。在你的情况下,它应该是这样的:
//Advisor Profile to Login Account
modelBuilder.Entity<ApplicationUser>()
.HasOptional(x => x.AdvisorProfile)
.WithRequired(x => x.Account)
.Map(x => x.MapKey("AdvisorFK"))
.WillCascadeOnDelete(false);
【讨论】:
以上是关于AspNetUser 上的实体框架流利的 api 1:1 属性无法更改 Account_Id 属性的主要内容,如果未能解决你的问题,请参考以下文章