针对传统数据库的CodeFirst EF4.1 MVC – 多重性冲突

不pipe我把它混在一起,它给我错误。 我有一种感觉,我失去了一些明显的东西,因为我不断收到这些错误。

在模型生成期间检测到一个或多个validation错误:

System.Data.Edm.EdmAssociationType::多重性与“Venue_Courses”关系中angular色“Venue_Courses_Source”中的参照约束冲突。 由于从属angular色中的所有属性都是不可空的,所以主体angular色的多重性必须为“1”。

System.Data.Edm.EdmAssociationEnd::多重性在“Venue_Courses”关系中的“Venue_Courses_Target”angular色中无效。 因为依赖angular色是指关键属性,所以依赖angular色的多重性的上界必须是1。

一个课程只能有一个场地,场地可以被很多课程使用

public class Course { [Key] public virtual int Id { get; set; } public string Title { get; set; } public DateTime StartDate { get; set; } public int VenueId { get; set; } public virtual Venue Venue { get; set; } } public class Venue { [Key] public int Id { get; set; } public string Name { get; set; } public virtual ICollection<Course> Courses { get; set; } } protected override void OnModelCreating(DbModelBuilder modelBuilder) { #region Courses //Table Alias modelBuilder.Entity<Course>().ToTable("DBSCHEMA.TR_COURSES"); //Keys modelBuilder.Entity<Course>().HasKey(c => c.Id); //Joins //Join to Venues modelBuilder.Entity<Course>().HasOptional(c => c.Venue); //Fields modelBuilder.Entity<Course>().Property(c => c.Id).HasColumnName("COURSE_ID"); modelBuilder.Entity<Course>().Property(c => c.Title).HasColumnName("CR_TITLE"); modelBuilder.Entity<Course>().Property(c => c.StartDate).HasColumnName("START_DATE"); modelBuilder.Entity<Course>().Property(c => c.VenueId).HasColumnName("VENUE_ID"); #endregion #region Venues //Table Alias modelBuilder.Entity<Venue>().ToTable("DBSCHEMA.VENUES"); //Keys modelBuilder.Entity<Venue>().HasKey(v => v.Id); //Joins modelBuilder.Entity<Venue>().HasMany(venue => venue.Courses); //Fields modelBuilder.Entity<Venue>().Property(v => v.Id).HasColumnName("VENUE_ID"); modelBuilder.Entity<Venue>().Property(v => v.Name).HasColumnName("VENUE_NAME"); #endregion } 

希望这仍然是时间来帮助你。 我也遇到了同样的问题,一直困扰着我将近一个小时,直到我发现我的错误。

问题是Course.Venue关系是可选的(在stream畅的API上声明),但是Course.VenueId的Id声明是强制的,所以你可以通过改变它来使VenueId成为可选的

 public int? VenueId { get; set;} 

或者在stream利的API上将关系更改为强制关系,并且OnModelCreating应该在您更改后正常运行。

searchnetworking后

System.Data.Edm.EdmAssociationType::多重性与Role中的参照约束冲突

它一直在这个post,所以这是我的问题和解决scheme:

我使用vs ef逆向工程扩展将大型项目从ef4.0升级到ef4.1。 我们的mvc应用程序使用metadatatype和partials来装饰ef4.0对象。

删除元数据types的文件后,项目开始工作。

根本问题是[必需的]属性,因为如果poco对象为空并且我的元数据types在同一属性上具有[必需]。 以前是执行mvcvalidation规则,现在ef4.1被用来填充导航属性。 删除[必须]closuresmetadatatype解决了这个问题。

 public partial class AgentAgency { public long OID { get; set; } public long? AgentOID { get; set; } public long? AgencyOID { get; set; } public string ReinsuranceYear { get; set; } public virtual Agency Agency { get; set; } public virtual Agent Agent { get; set; } } public class AgentAgencyMetadata { public Int64 OID { get; set; } [Required] public Int64 AgentOID { get; set; } [Required] public Int64 AgencyOID { get; set; } } 

我在我的entity framework项目中遇到了这个错误,我通过修改VenueId的空值来解决这个问题。

确保在映射中不使用HasKey()和HasOptional()。 这是我的情况造成这个错误。