我在使用代码优先方法播种数据库时遇到此错误.
一个或多个实体的验证失败.有关详细信息,请参阅"EntityValidationErrors"属性.
说实话,我不知道如何检查验证错误的内容.Visual Studio向我显示它是一个包含8个对象的数组,因此有8个验证错误.
这与我之前的模型有关,但我做了一些修改,我在下面解释:
请原谅我的长代码,但我必须将其全部粘贴.在以下代码的最后一行中抛出异常.
namespace Data.Model
{
public class Position
{
[DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.Identity)]
public int PositionID { get; set; }
[Required(ErrorMessage = "Position name is required.")]
[StringLength(20, MinimumLength = 3, ErrorMessage = "Name should not be longer than 20 characters.")]
[Display(Name = "Position name")]
public string name { get; set; }
[Required(ErrorMessage = "Number of years is required")]
[Display(Name = "Number of years")]
public int yearsExperienceRequired { get; set; }
public virtual ICollection<ApplicantPosition> applicantPosition { get; set; …
Run Code Online (Sandbox Code Playgroud) 使用实体框架4.1代码优先于模型/数据库优先使用EDMX图表有什么优缺点?
我正在尝试完全理解使用EF 4.1构建数据访问层的所有方法.我正在使用Repository模式和IoC
.
我知道我可以使用代码优先方法:手动定义我的实体和上下文并用于ModelBuilder
微调模式.
我还可以创建一个EDMX
图表并选择一个代码生成步骤,该步骤使用T4模板生成相同的POCO
类.
在这两种情况下,我最终POCO
都得到了ORM
不可知的对象和源自的上下文DbContext
.
数据库优先似乎最吸引人,因为我可以在企业管理器中设计数据库,快速同步模型并使用设计器对其进行微调.
那么这两种方法有什么区别?是仅仅关于VS2010与企业管理器的偏好?
entity-framework poco ef-code-first entity-framework-4.1 ef-database-first
我的理解是,在[NotMapped]
EF 5当前处于CTP中之前,该属性不可用,因此我们无法在生产中使用它.
如何将EF 4.1中的属性标记为忽略?
更新:我注意到其他一些奇怪的事情.我得到了该[NotMapped]
属性,但由于某种原因,即使public bool Disposed { get; private set; }
标记为,EF 4.1仍会在数据库中创建一个名为Disposed的列[NotMapped]
.该IDisposeable
课程当然是实现的,但我不知道这应该如何重要.有什么想法吗?
我刚开始使用EF代码,所以我在这个主题中完全是初学者.
我想在团队和比赛之间建立关系:1场比赛= 2队(主场,客场)和结果.我认为创建这样的模型很容易,所以我开始编码:
public class Team
{
[Key]
public int TeamId { get; set;}
public string Name { get; set; }
public virtual ICollection<Match> Matches { get; set; }
}
public class Match
{
[Key]
public int MatchId { get; set; }
[ForeignKey("HomeTeam"), Column(Order = 0)]
public int HomeTeamId { get; set; }
[ForeignKey("GuestTeam"), Column(Order = 1)]
public int GuestTeamId { get; set; }
public float HomePoints { get; set; }
public float GuestPoints { get; set; }
public DateTime …
Run Code Online (Sandbox Code Playgroud) virtual
在EF Code First中的属性上使用时,关键字是否有效?有人能描述不同情况下的所有后果吗?
例如,我知道它可以控制延迟加载 - 如果你在ICollection/one-to-many关系属性上使用virtual关键字,默认情况下它将是延迟加载的,而如果你将虚拟关键字保留为out,它将会急切的.
virtual
关键字在EF中与POCO实体有什么其他影响?我应该默认使用virtual
我的所有属性,还是默认不使用它?
让我们假设我有一个在Entity Framework中直接执行sql命令的有效需求.我无法弄清楚如何在我的sql语句中使用参数.以下示例(不是我的实例)不起作用.
var firstName = "John";
var id = 12;
var sql = @"Update [User] SET FirstName = @FirstName WHERE Id = @Id";
ctx.Database.ExecuteSqlCommand(sql, firstName, id);
Run Code Online (Sandbox Code Playgroud)
ExecuteSqlCommand方法不允许您传入ADO.Net中的命名参数,并且此方法的文档未提供有关如何执行参数化查询的任何示例.
如何正确指定参数?
我有这样的情况,我在DatabaseInitializer()中为EF 4.1初始化我的模型,并得到这个恼人的错误"Validation failed for one or more entities. See 'EntityValidationErrors' property for more details."
所以,我去了这个EntityValidationErrors,有一个字段{System.Data.Entity.Validation.DbEntityValidationResult}
,根本没有给我任何关于它无法初始化的字段的信息.有没有办法获得有关此错误的更多信息?
清除问题:
我知道如何解决字符串长度问题.我问的是如何获得打破模型的确切字段名称.
当我在一个实体上使用GetById()然后将子实体的集合设置为来自MVC视图的新列表时,我收到此错误.
操作失败:无法更改关系,因为一个或多个外键属性不可为空.当对关系进行更改时,相关的外键属性将设置为空值.如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象.
我不太明白这一行:
由于一个或多个外键属性不可为空,因此无法更改关系.
为什么要更改2个实体之间的关系?它应该在整个应用程序的整个生命周期内保持不变.
发生异常的代码很简单,即将集合中已修改的子类分配给现有父类.这有望满足删除子类,添加新类和修改的需要.我原以为Entity Framework会处理这个问题.
代码行可以提炼为:
var thisParent = _repo.GetById(1);
thisParent.ChildItems = modifiedParent.ChildItems();
_repo.Save();
Run Code Online (Sandbox Code Playgroud) 随着我深入研究DbContext,DbSet和相关接口,我想知道为什么你需要围绕这些实现实现一个单独的"通用"存储库?
它看起来像DbContext和IDbSet做你需要的一切,并在DbContext中包含"工作单元".
我在这里遗漏了什么,或者似乎人们喜欢无缘无故地添加另一层依赖.
行为[MaxLength]
和[StringLength]
属性有什么区别?
据我所知(除了[MaxLength]
可以验证数组的最大长度)这些是相同的,有点多余?