EF FluentAPI映射一对多 关系时候报错

提示很明显,不可为空的外键为空了,但是 问题是,我只是初始化 关系映射而已:见代码

public ColumnsCategoryMapConfiguration()
{
ToTable("ColumnsCategory").HasKey(x => x.Id);
Property(x => x.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)
.IsRequired()
.IsConcurrencyToken();

Property(x => x.CategoryName).HasMaxLength(50).IsRequired();

Property(x => x.SystemMenuKey).IsOptional();//后加的
HasOptional(x => x.SystemMenu)
.WithMany(x => x.ColumnsCategoryCollection)
.HasForeignKey(x => x.SystemMenuKey)
.WillCascadeOnDelete(false);

}

关于 HasOptional;见截图:

明明是说在数据库中将是可null类型吗?搞什么灰机,难道被微软骗了?

后来在 stackoverflow上看到一哥们儿针对以类似问题,这么回答

Hope this is still on time to help you. I was also having the exact same problem and was troubling with it for almost an hour until I could spot my mistake.

The problem is that Course.Venue relationship is optional (as declared on the fluent API), but the Id declaration of Course.VenueId is mandatory, so you can either make VenueId optional by changing it to

public int? VenueId { get; set;}

or change the relationship to mandatory on the fluent API, and the OnModelCreating should run fine once you changed that.

于是 加上了红色部分 内容,问题即可消除。

时间: 2024-10-17 14:41:49

EF FluentAPI映射一对多 关系时候报错的相关文章

将CDM中所有以Relatonship_开头的关系全部重命名,避免生成数据库因为重复关系名报错

Option   Explicit ValidationMode   =   True InteractiveMode =   im_Batch Dim   mdl   '当前model '获取当前活动model Set   mdl   =   ActiveModel If   (mdl   Is   Nothing)   Then MsgBox   "There   is   no   current   Model " ElseIf   Not   mdl.IsKindOf(Pdc

使用MVC和EF,在保存数据的时候报错:System.Data.Entity.Validation.DbEntityValidationException: 对一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationErrors”属性。

public UserInfo Create(UserInfo entity) { try { context.UserInfoes.Add(entity); context.SaveChanges(); } catch (Exception ex) { throw; } return entity; } 从局部变量框中找EntityValidationErrors--ValidationErrors中的第一个元素--ErrorMessage属性,查看错误原因

关于程序中数据库报错“父项未找到”

1.前端界面含有弹出框具有父子关系,在子类中未正确调用父类导致,请仔细查看程序 2.数据库对应表映射时,一个字段已经在表中映射成A表,但后期手动更改该字段映射成B表,更新映射启动后,运行报错"父项未找到". 由于这种操作在数据库中更改字段映射表时不会在该映射更新操作,而是在生成一个新的外键关系,此时需要在数据库中找到冲突的外键,手动删除 3 在程序运行过程中字段数据含有null,也会导致此报错 注意:如果字符串为拼接组成时,只要含有null,也会造成失败 -------以上为个人目前遇

报错:System.Data.Entity.Validation.DbEntityValidationException: 对一个或多个实体的验证失败

使用MVC和EF,在保存数据的时候报错:System.Data.Entity.Validation.DbEntityValidationException: 对一个或多个实体的验证失败.有关详细信息,请参阅"EntityValidationErrors"属性. 日志记录中,出错的地方在result += db.SaveChanges();所在行,尝试如下操作: →使用try...catch捕获→在catch所在行打上断点,运行,F11,对ex变量添加监视→在EntityValidati

com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 2-byte UTF-8 sequence报错解决方法

添加了XML实体和表映射文件后,莫名报错,百思不得其解,也找不到哪里错了,后来把mybatis-config.xml文件中去掉中文注释就好了 mybatis-config.xml文件中的内容如下,去掉里面的<!-- 品牌 -->注释就好了 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Conf

【Tomcat】Tomcat报错追踪

应用部署上之后无法正常启动,tomcat启动日志如下: 信息: Starting service Catalina 2015-7-22 18:39:31 org.apache.catalina.core.StandardEngine start 信息: Starting Servlet Engine: Apache Tomcat/6.0.36 2015-7-22 18:39:31 org.apache.catalina.startup.HostConfig deployDirectory 信息:

Hibernate 集合映射 一对多多对一 inverse属性 + cascade级联属性 多对多 一对一 关系映射

1 . 集合映射 需求:购物商城,用户有多个地址. // javabean设计 // javabean设计 public class User { private int userId; private String userName; // 一个用户,对应的多个地址 private Set<String> address; private List<String> addressList = new ArrayList<String>(); //private Str

Mybatis框架中实现一对多关系映射

学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢? 其实很简单 首先我们照常先准备前期的环境(具体解释请  参考初识Mybatis进行增.删.改.查 blogs )这里我就直接上代码了 主配置文件:Configuration.xml <?xml version="1.0" encoding="UTF-8" ?&

菜鸟学习Hibernate——一对多关系映射

Hibernate中的关系映射,最常见的关系映射之一就是一对多关系映射例如学生与班级的关系,一个班级对应多个学生.如图: Hibernate中如何来映射这两个的关系呢? 下面就为大家讲解一下: 1.创建实体类Classes和实体类Student Classes.java package com.bjpowernode.hibernate; import java.util.Set; public class Classes { private int id; private String nam