标签:entity-framework-6 asp-net c asp-net-mvc entity-framework
实体框架在我的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添加了流畅的配置
标签:entity-framework-6,asp-net,c,asp-net-mvc,entity-framework 来源: https://codeday.me/bug/20191027/1943118.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。