c#-实体框架-代码优先-数据注释-不必要的外键列
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-实体框架-代码优先-数据注释-不必要的外键列,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1767字,纯文字阅读大概需要3分钟。
内容图文
![c#-实体框架-代码优先-数据注释-不必要的外键列](/upload/InfoBanner/zyjiaocheng/683/07f01e48bd944db296fef5b4a4e68e39.jpg)
实体框架在我的AccountCompanyRole表中创建了两个不必要的列.
客户公司
public class AccountCompany
{
[Key, Column(Order = 0), ForeignKey("Account")]
public int AccountID { get; set; }
[Key, Column(Order = 1), ForeignKey("Company")]
public int CompanyID { get; set; }
public virtual Account Account { get; set; }
public virtual Company Company { get; set; }
public virtual ICollection<AccountCompanyRole> AccountCompanyRoles { get; set; }
}
AccountCompanyRoles
public class AccountCompanyRole
{
[Key, Column(Order = 0), ForeignKey("AccountCompany")]
public int AccountID { get; set; }
[Key, Column(Order = 1), ForeignKey("AccountCompany")]
public int CompanyID { get; set; }
[Key, Column(Order = 2), ForeignKey("Role")]
public int RoleID { get; set; }
public virtual AccountCompany AccountCompany { get; set; }
public virtual Role Role { get; set; }
}
OnModelCreating
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<AccountCompanyRole>()
.HasRequired(p => p.AccountCompany)
.WithMany()
.WillCascadeOnDelete(false);
base.OnModelCreating(modelBuilder);
}
数据库结果
如您所见,即使我在数据注释中指定了主键和外键,EF也在AccountCompanyRoles中添加了两个额外的外键.
问题
>如何防止它创建AccountCompany_AccountID和AccountCompany_CompanyID?
>这是我追求的最佳结构吗?我应该改为使用一个主键并将IsUnique索引放在AccountID和CompanyID上吗?这可能会解决我的问题.
解决方法:
您必须在流利的关系中指定外键,如下所示:
modelBuilder.Entity<AccountCompanyRole>()
.HasRequired(p => p.AccountCompany)
.WithMany().HasForeignKey(d => new { d.AccountID, d.CompanyID })
.WillCascadeOnDelete(false);
modelBuilder.Entity<AccountCompany>()
.HasMany(c => c.AccountCompanyRoles)
.WithRequired(d => d.AccountCompany)
.HasForeignKey(e => new {e.AccountID, e.CompanyID});
编辑:
为AccountCompany添加了流畅的配置
内容总结
以上是互联网集市为您收集整理的c#-实体框架-代码优先-数据注释-不必要的外键列全部内容,希望文章能够帮你解决c#-实体框架-代码优先-数据注释-不必要的外键列所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。