Questions tagged «entity-framework»

有关ADO.NET实体框架的问题,请参阅.NET Framework的对象关系映射(ORM)工具。如果适用,请添加特定于版本的标签。请勿对实体框架核心问题使用此标签。请改用entity-framework-core。

10
实体框架6 GUID作为主键:无法将值NULL插入表'FileStore'的列'Id'中;列不允许为空
我有一个主键为“ Id”的实体,该实体为Guid: public class FileStore { public Guid Id { get; set; } public string Name { get; set; } public string Path { get; set; } } 和一些配置: protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<FileStore>().Property(x => x.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); base.OnModelCreating(modelBuilder); } 当我尝试插入记录时,出现以下错误: 无法将值NULL插入表'FileStore'的列'Id'中;列不允许为空。INSERT失败。\ r \ n该语句已终止。 我不想手动生成Guid。我只想插入一条记录Id并由SQL Server生成。如果我设置.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity),Id列不是SQL Server中的“身份”列。 如何配置实体框架以在SQL Server中自动生成Guid?

9
实体框架优先:通过更新数据库进行迁移失败,强制进行不必要的(?)add-migration
我使用迁移(EF 5.0)和代码优先的方式产生了有趣的效果: 我使用GUID主键创建了一些模型。(顺便说一句:对我来说,SQL Server使用NEWSEQUENTIALID(),这很重要,这似乎是当前版本中的默认值) 在某个时候,我激活了迁移。我在初始迁移中添加了一些代码,主要是.Index()根据需要。 当我删除数据库并调用更新数据库时,出现以下错误: 无法更新数据库以匹配当前模型,因为有未决的更改并且自动迁移被禁用。将挂起的模型更改写到基于代码的迁移中,或者启用自动迁移。将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移。您可以使用Add-Migration命令将挂起的模型更改写入基于代码的迁移。 我尝试了AutomaticMigrationsEnabled = true,但没有更改或添加任何内容就可以了! 但是由于我不想要AutomaticMigrationsEnabled,我也尝试再次删除数据库,update-database然后调用,然后再删除add-migration。我最后进行了一次额外的迁移,似乎没有任何改变(请参阅下文)。我还尝试将这些行添加到初始迁移的底部-但这不会改变任何内容。 型号之一: [Table(Speaker.TABLENAME)] public class Speaker : BaseModel { public const String TABLENAME = "Speaker"; [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] public Guid Id { get; set; } [Required] [MaxLength(50, ErrorMessage = "Name must be 50 characters or less")] public string Name { get; …

8
添加新实体标量时,Entity Framework 4映射片段错误
我有一个Entity Framework 4模型优先设计。我在设计器中创建了我的模型的初稿,一切都很好。我编译,生成数据库等。 后来我尝试向现有实体之一添加字符串标量(Nullable = true),并且在编译时不断出现此类错误: 错误3004:映射片段的问题从第569行开始:在Set MyEntities中没有为属性MyEntity.MyValue指定映射。带有密钥(PK)的实体在以下情况下不会往返:实体的类型为[MyEntities.MyEntity] 每当添加标量时,我始终必须手动打开EDMX文件并更正XML。 关于发生了什么的想法?

4
EF包括其他实体(通用存储库模式)
我在Entity Framework Code First之上使用通用存储库模式。一切工作正常,直到我需要在查询中包含更多实体。我必须成功包含一个实体,但是现在我不知道如何包含多个实体。看看到目前为止我得到了什么: public IQueryable<TEntity> GetQuery<TEntity>() where TEntity : class { var entityName = GetEntityName<TEntity>(); return _objectContext.CreateQuery<TEntity>(entityName); } public IList<TEntity> GetQueryWithInclude<TEntity>(string toInclude) where TEntity : class { var entityName = GetEntityName<TEntity>(); return _objectContext.CreateQuery<TEntity>(entityName).Include(toInclude).ToList(); } private string GetEntityName<TEntity>() where TEntity : class { return string.Format("{0}.{1}", _objectContext.DefaultContainerName, _pluralizer.Pluralize(typeof(TEntity).Name)); } 我试图做但没用的是将字符串数组传递给函数,然后尝试将“包含”附加到查询顶部。我想知道如果我一次调用GetQueryWithInclude并传递一个实体名称(实际上是一个导航属性)来聚合查询结果该怎么办,但是我担心这可能会在每次调用时重复查询结果...您认为什么是使它正常工作的最佳方法? 提前致谢! …

10
具有相同键的对象已存在于ObjectStateManager中。ObjectStateManager无法使用相同的键跟踪多个对象
尝试将EF5与通用存储库模式结合使用,并使用ninject进行依赖关系注入,并尝试使用带有edmx的存储过程将实体更新到数据库时遇到问题。 我在DbContextRepository.cs中的更新是: public override void Update(T entity) { if (entity == null) throw new ArgumentException("Cannot add a null entity."); var entry = _context.Entry<T>(entity); if (entry.State == EntityState.Detached) { _context.Set<T>().Attach(entity); entry.State = EntityState.Modified; } } 从我的AddressService.cs返回到我的存储库,我有: public int Save(vw_address address) { if (address.address_pk == 0) { _repo.Insert(address); } else { _repo.Update(address); …

1
DbQuery.Include()的重载需要lambda到哪里去了?
我刚刚为使用EntityFramework的新项目声明了一些代码优先模型。 public class BlogEntry { public long Id { get; set; } public long AuthorId { get; set; } public DateTime PublishedStamp { get; set; } public string Title { get; set; } public string Text { get; set; } public virtual User Author { get; set; } } public …




5
如何在EF代码优先数据库中删除一对多的子记录?
好吧,我有一对多的相关模型: public class Parent { public int Id { get; set; } public string Name { get; set; } public ICollection<Child> Children { get; set; } } public class Child { public int Id { get; set; } public string ChildName { get; set; } } 我要做的是清除Parent.Children并从数据库中删除相关的子实体。我已经尝试过: 数据库上下文类: modelBuilder.Entity<Parent>() .HasMany(p …

3
查询结果不能被多次枚举
我正在使用实体框架(ef),并收到以下错误: “查询结果不能多​​次枚举。” 我有一个包含ef数据上下文的存储库类。然后,我有一个控制器类(不要与MVC控制器混淆),其中包含存储库的实例。到目前为止RadComboBoxItemData一切顺利...我在控制器上有一个搜索方法,该方法应该返回的数组,该数组用于填充Telerik RadComboBox控件。 public RadComboBoxItemData[] Search(int id, string searchText) { var query = context.Search(id, searchText); List<RadComboBoxItemData> result = new List<RadComboBoxItemData>(); foreach (var item in query) { RadComboBoxItemData itemData = new RadComboBoxItemData(); itemData.Text = ""; // assign some text here..; itemData.Value = ""; /*assign some value here..*/ result.Add(itemData); } return …


6
实体框架和调用context.dispose()
什么时候应该调用DbContext.dispose()实体框架? 这种假想的方法不好吗? public static string GetName(string userId) { var context = new DomainDbContext(); var userName = context.UserNameItems.FirstOrDefault(x => x.UserId == userId); context.Dispose(); return userName; } 这是否更好? public static string GetName(string userId) { string userName; using(var context = new DomainDbContext()) { userName = context.UserNameItems.FirstOrDefault(x => x.UserId == userId); context.Dispose(); } return …

3
用于内部联接的实体框架查询
查询的内容是: select s.* from Service s inner join ServiceAssignment sa on sa.ServiceId = s.Id where sa.LocationId = 1 在实体框架中? 这是我写的: var serv = (from s in db.Services join sl in Location on s.id equals sl.id where sl.id = s.id select s).ToList(); 但这是错误的。有人可以引导我走这条路吗?

1
实体框架6.0下的ORM实体与域实体
我偶然发现了以下两篇文章,第一篇和第二篇,作者在摘要中指出,不应将ORM实体和域实体混淆。 当我使用“代码优先”方法使用EF 6.0进行代码编写时,我正好面对此问题。我将POCO类用作EF中的实体以及域/业务对象。但是我经常遇到这样的情况,我将一个属性定义为public或将一个导航属性定义为virtual只是因为EF Framework迫使我这样做。 我不知道该怎么作为这两篇文章的底线?例如,我是否应该为实体框架真正创建一个CustomerEF类,为我的域创建一个CustomerD。然后创建一个使用CustomerD的存储库,将其映射到CustomerEF,然后进行一些查询,然后将接收到的CustomerEF映射回CustomerD。我以为EF就是将域实体映射到数据。 因此,请给我一些建议。我是否忽略了EF能够为我提供的重要信息?还是这是EF无法完全解决的问题?在后一种情况下,什么是解决此问题的好方法?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.