Tag: entity framework

entity framework中的HierarchyID不起作用

我们正在为我们的应用程序使用基于entity framework模型的WCF数据服务。 在这里,我们需要添加一个类型为HierarchyId的列的表。 当我将该表添加到EDMX文件时, HierarchId列不会出现在类文件中。 我该怎么做才能使用HierarchyID ? 我读到Entity Framework不支持HierarchyID ,那么我该如何实现呢?

Oracle .Net ManagedDataAccess错误:无法从程序集加载类型’OracleInternal.Common.ConfigBaseClass’

我有一个在本地,我们的开发服务器和我们的生产服务器上工作的项目。 当我尝试在测试服务器上运行它时,我得到下面的错误,除了茫然地盯着我的屏幕,我不知道该怎么办。 提示? 将问题追溯到其来源的过程? 我已经为Oracle 12.2等安装了NuGet包。 无法从程序集“Oracle.ManagedDataAccess,Version = 4.121.2.0,Culture = neutral,PublicKeyToken = 89b483f429c47342”加载类型“OracleInternal.Common.ConfigBaseClass”。 描述:执行当前Web请求期间发生未处理的exception。 请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。 exception详细信息:System.TypeLoadException:无法从程序集“Oracle.ManagedDataAccess,Version = 4.121.2.0,Culture = neutral,PublicKeyToken = 89b483f429c47342”加载类型“OracleInternal.Common.ConfigBaseClass”。 来源错误: 在执行当前Web请求期间生成了未处理的exception。 可以使用下面的exception堆栈跟踪来识别有关exception的起源和位置的信息。 堆栈跟踪: [TypeLoadException:无法从程序集’Oracle.ManagedDataAccess,Version = 4.121.2.0,Culture = neutral,PublicKeyToken = 89b483f429c47342’加载类型’OracleInternal.Common.ConfigBaseClass’。 Oracle.ManagedDataAccess.EntityFramework.EntityFrameworkProviderSettings.Oracle.ManagedDataAccess.EntityFramework.EFProviderSettings.IEFProviderSettings.get_TracingEnabled()+0 Oracle.ManagedDataAccess.EntityFramework.EFProviderSettings.InitializeProviderSettings()+111 Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices..ctor()+629 Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices..cctor()+28 [TypeInitializationException:’Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices’的类型初始值设定项引发exception。 Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices.get_Instance()+24 Web.Config中包含以下块: 和 注意:此服务器上还有其他项目,它们只是为.Net使用不同版本的Oracle客户端。 其他人都没有使用托管驱动程序。 我正在寻找一种方法来深入研究这个错误,一些暗示该类型的来源和加载方式。

具有存储过程的代码优先entity framework返回复杂全文搜索的结果

我正在寻找以下场景的设计建议: 我有一个代码优先的EF5 MVC应用程序。 我正在构建一个全文搜索function,它将包含来自许多表的多个加权列。 由于我无法使用这些表中的索引创建视图(其中一些包含文本/二进制列),因此我创建了一个存储过程,该过程将输出我的对象的ID(例如PersonID )以及与该对象关联的排名。搜索条件。 我目前的方法是创建一个辅助类来执行全文搜索,调用存储过程并根据返回的ID加载来自上下文的所有对象。 我的问题是: 我的方法是否合理/遵循合理的最佳做法? 有没有其他人做过类似的经验教训? 有没有办法更有效地执行此操作(即将存储过程的结果直接返回/映射到实体而无需额外的查找?) UPDATE 将我的详细实现从问题编辑转移到自己的答案中,更符合经常推荐的内容@ meta.stackexchange.com

我什么时候应该使用CompiledQuery?

我有一张桌子: — Tag ID | Name ———– 1 | c# 2 | linq 3 | entity-framework 我有一个类将有以下方法: IEnumerable GetAll(); IEnumerable GetByName(); 在这种情况下我应该使用编译的查询吗? static readonly Func<Entities, IEnumerable> AllTags = CompiledQuery.Compile<Entities, IEnumerable> ( e => e.Tags ); 然后我的GetByName方法将是: IEnumerable GetByName(string name) { using (var db = new Entities()) { return AllTags(db).Where(t => t.Name.Contains(name)).ToList(); } } 它生成一个SELECT ID, […]

EF – 在HTTP请求期间创建模型exception时,不能使用上下文

我收到“在创建模型时无法使用上下文。” 在我的一个网页中的Web应用程序中出现问题。 此特定网页每2-3秒POST一次,以刷新屏幕。 根据我的测试,我发现如果我有2个或更多的浏览器实例打开到这个页面,几分钟后我收到一个“创建模型时不能使用上下文”来自存储库深处的exception。 此代码调用“服务”来检索所需的数据。 此代码在MVC Controller类的自定义授权属性中执行。 // Code in custom “Authorization” attribute on the controller int? stationId = stationCookieValue; // Read value from cookie RoomStationModel roomStationModel = RoomStationService.GetRoomStation(stationId); // Error occurs inside this call 这是“RoomStationModel” public class RoomStationModel { [Key] public int RoomStationId { get; set; } public int? RoomId { get; set; } […]

更新实体列表的有效方法

我正在开发一个允许用户编辑实体列表的项目。 我将这些实体映射到视图模型并使用编辑器字段显示它们。 当用户按下提交按钮时,我会浏览每个模型并进行更新,如下所示: foreach (var viewModel in viewModels) { //Find the database model and set the value and update var entity = unit.EntityRepository.GetByID(fieldModel.ID); entity.Value = viewModel.Value; unit.EntityRepository.Update(entity); } 上面的代码可以工作,但是你可以看到我们需要为每个实体命中两次数据库(一次检索,另一次更新)。 使用Entity Framework有更有效的方法吗? 我注意到每个更新都会生成一个单独的SQL语句。 循环结束后是否有提交所有更新的方法?

一个与HasForeignKey为零或一

我有两个型号: public class Person { public virtual int Id { get; set; } public virtual Employee Employee { get; set; } // optional } public class Employee { public virtual int Id { get; set; } public virtual int PersonId { get; set; } public virtual Person Person {get; set; } // required } public […]

如何附加不是来自数据库的Entity Framework对象?

我完全分离了我的Entity Framework对象和我的POCO对象,我只是来回翻译它们…… 即: // poco public class Author { public Guid Id { get; set; } public string UserName { get; set; } } 然后我有一个EF对象“作者”具有相同的属性.. 所以我有我的业务对象 var author = new Author { UserName=”foo”, Id=”Guid thats in the db” }; 我想保存此对象,所以我执行以下操作: var dbAuthor = new dbAuthor { Id=author.Id, UserName=author.UserName }; entities.Attach(dbAuthor); entities.SaveChanges(); 但这给了我以下错误: 具有null EntityKey值的对象无法附加到对象上下文。 编辑:看起来我必须使用entities.AttachTo(“作者”,dbAuthor); […]

迁移同步开发和生产数据库

我正在使用MVC 5和.NET Framework 4.5.1。 代码优先。 我也在使用SQL 2012服务器和(localdb)\ v11.0进行迁移。 我正在使用C#和MVC5开发项目。 在开发过程中,我在我的开发计算机中创建了许多新表,并更改了一个“名称”字段,我相信系统会为其编制索引。 我添加了它并删除了几次。 之后,我添加了很多新的无关表,但出于某种原因,由于“名称”字段的索引,我的迁移开始给我外部约束错误。 当我修复它们时,这些错误不断增加,因此,我决定在迁移中恢复到初始状态,并使用当前位置作为新的起点重置。 我希望生产表能够在开发db中查看这个新的起点,并将其自身重新定义为开发状态。 我认为我已经读过某个地方,生产数据库将自己与开发数据库匹配并自行更新。 我相信生产数据库中有一个迁移文件,它与开发数据库中的文件相匹配 – 该文件明显不同步。 我考虑过删除其中的数据,但我一直在等待,直到得到建议。 无论如何,我在Dev计算机中更改了迁移目录的名称,并将其从项目中排除。 然后我在开发计算机上重新初始化我的表(在我的本地数据库中使用新的数据库名称),并使用初始化数据重新加载它。 一切都奏效了。 现在,我遇到了一个新问题,我的生产数据库和我的开发数据库是不同的,我在开发计算机中的迁移设置为创建新文件,而生产状态中的迁移期望更早的迁移。 每次我尝试使用开发计算机更新生产数据库时,我都会收到文件存在的错误 – 当然他们这样做了。 所以,我在迁移文件中注释掉了所有创建文件并重新尝试了。 现在,生产数据库将启动,但不会运行,因为更新的代码具有它所指的新字段,而这些字段未在生产数据库中创建。 因此,在我的生产数据库中,我开始收到所有缺失字段的错误。 我试图使自动迁移成为现实,但是没有用。 我猜,解决这个问题的唯一方法是手动进行逐个同步。 问题1:是否有一种自动同步(使用迁移)生产数据库和开发数据库的方法,以便它们与开发数据库相同? 问题2:考虑到上述情况,还有什么更好的方法可以用生产数据库重新设置迁移?

如何在Entry.state == EntityState.Added的位置设置自定义validation

如何设置自定义validation,当Entry.state == EntityState.Added为true时,以下代码将起作用! 自定义validation码: [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)] class UniqueEmailAddress : ValidationAttribute { protected override ValidationResult IsValid(object value, ValidationContext validationContext) { this.email = (string)value; using (G9EntityDataBaseClass oEntity = new G9EntityDataBaseClass()) { if (oEntity.User.Where(u => u.email == email).Count() == 0) { return ValidationResult.Success; } else { return new ValidationResult(ErrorMessageString); } } } } 使用 : [CustomValidation.UniqueEmailAddress] […]