文章内容
2017/3/26 9:35:42,作 者: 黄兵
Dependent Role 多重性的上限必须为“1”
今天在写代码报错,如下提示:
模型生成过程中检测到一个或多个验证错误:
FirstProject_SecondProjects_Target: : 关系“FirstProject_SecondProjects”中 Role“FirstProject_SecondProjects_Target”的多重性无效。因为 Dependent Role 引用的是键属性,Dependent Role 多重性的上限必须为“1”。
以前写代码也遇到过这种错误,一直扔在那里没有管,直到今天才把这个问题给解决了,先看一下原来的代码:
一级目录代码如下:
1 |
|
二级目录代码如下: |
1 2 3 4 5 6 7 8 9 10 11 12 | namespace _8677333.AppDAL.Entities { public class SecondProject { public int Id { get ; set ; } public string SecondProName { get ; set ; } public virtual FirstProject FirstProjects { get ; set ; } } } |
之后生成数据库代码如下(采用Fluent API的方式生成):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public virtual DbSet<FirstProject> FirstProject { get ; set ; } public virtual DbSet<SecondProject> SecondProject { get ; set ; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { //FirstProject和SecondProject之间一对多关系 modelBuilder.Entity<FirstProject>() .HasMany(c => c.SecondProjects) .WithRequired(c => c.FirstProjects) .HasForeignKey(c => c.Id) .WillCascadeOnDelete( false ); base .OnModelCreating(modelBuilder); } |
之后提示这个错误。
解决方案如下:
二级目录更改的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | namespace _8677333.AppDAL.Entities { public class SecondProject { public int Id { get ; set ; } public string SecondProName { get ; set ; } //注意:在这里的改变 public int FirstProId { get ; set ; } public virtual FirstProject FirstProjects { get ; set ; } } } |
Fluent API的方式生成数据库代码改变如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public virtual DbSet<FirstProject> FirstProject { get ; set ; } public virtual DbSet<SecondProject> SecondProject { get ; set ; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { //FirstProject和SecondProject之间一对多关系 modelBuilder.Entity<FirstProject>() .HasMany(c => c.SecondProjects) .WithRequired(c => c.FirstProjects) //注意:这里的代码改变 .HasForeignKey(c => c.FirstProId) .WillCascadeOnDelete( false ); base .OnModelCreating(modelBuilder); } |
这样就不会产生多重性无效(二义性)了。
评论列表