Tag: entity framework

如何在EF中配置一对多关系

我有以下型号 public class PageConfig : Base { // Properties Etc.. public ICollection ScrollerImages { get; set; } } 我的方法是使用联结表{PageConfigID,ImageID}进行绑定。 在我的模型活页夹中,我尝试了以下.. modelBuilder.Entity() .HasMany(x => x.ScrollerImages) .WithMany() .Map(x => { x.ToTable(“junc_PageConfigScrollerImages”); x.MapLeftKey(“PageConfigID”); x.MapRightKey(“ImageID”); }); 这导致图像的空集合。 如何将这些图像绑定到PageConfig模型? 编辑 大多数问题是由于用户错误。 这发生在你身上…… 检查数据库中的键约束是否已正确设置。 模型上的ICollection需要是虚拟的。

EF:对象更新过程不会更改一个属性的值

我的应用程序有2个类: PaymentMethod & Currency ( Currency是PaymentMethod属性)。 当我的应用程序使用Currency PaymentMethod的新值更新PaymentMethod时(值已经存在于db中,但它被分配给PaymentMethod ),在SaveCHanges方法之后, Currency属性仍包含旧值。 为什么?:) 这是我的应用程序替换Currency对象值的方式: if (String.Compare(existingPaymentMethod.Currency.Code, mwbepaymentmethod.CurrencyCode, true) !=0) { var readCurrency = currencyRepo.FindByCode(mwbepaymentmethod.CurrencyCode); existingPaymentMethod.Currency = readCurrency; } paymentMethodRepository.Save(ref existingPaymentMethod); return true; PaymentMethod和Currency类: public class PaymentMethod : BaseEntity { public enum MethodTypeEnum { Creditcard, Virtualcard, Wallet }; public MethodTypeEnum MethodType { get; set; } public int VendorId […]

StoreGeneratedPattern是什么意思?

我正在做EF设计,谁能告诉我StoreGeneratedPattern是什么意思? 我无法在网上找到一个简单直接的答案。

业务validation逻辑代码气味

请考虑以下代码: partial class OurBusinessObject { partial void OnOurPropertyChanged() { if(ValidateOurProperty(this.OurProperty) == false) { this.OurProperty = OurBusinessObject.Default.OurProperty; } } } 也就是说,当OurProperty中的OurBusinessObject的值发生更改时,如果该值无效,请将其设置为默认值。 这种模式让我感觉像代码味道,但其他人(在我的雇主)不同意。 你的想法是什么? 编辑补充 :我被要求添加一个解释为什么这被认为是好的。 我们的想法是,业务对象可以validation自己的属性,并在validation失败的情况下设置干净的默认值,而不是让业务对象的生产者validation数据。 此外,有人认为,如果validation规则发生变化,业务对象生产者将不必更改其逻辑,因为业务对象将负责validation和清理数据。

entity framework批量插入引发KeyNotFoundException错误

我使用的是AddRange() ,由于AddRange()方法速度慢,我需要使用BulkInsert 。 所以我通过这里添加了针对EF6的BulkInsert的NuGet包。 添加dll后我收到的第一件事就是这个警告: 发现同一依赖程序集的不同版本之间存在冲突。 请在项目文件中将“AutoGenerateBindingRedirects”属性设置为true。 我List了所有我的Contact实体,即需要添加的contactsToInsert(我的联系人在另一个表中也有一个外键)。 当我尝试运行以下代码时,我收到一个KeyNotFoundException ,声称“ 给定的密​​钥不在字典中 ”。 using (var db = new Entities(myConnectionString)) { db.BulkInsert(contactsToInsert); db.SaveChanges(); } NB。 我在BackgroundWorker运行BulkInsert。 这可能是导致问题的原因吗? 堆栈跟踪: at System.Collections.Generic.Dictionary`2.get_Item(TKey key) at EntityFramework.MappingAPI.Mappers.MapperBase.BindForeignKeys() in c:\dev\EntityFramework.MappingAPI\trunk\src\EntityFramework.MappingAPI\Mappers\MapperBase.cs:line 603 at EntityFramework.MappingAPI.Mappings.DbMapping..ctor(DbContext context) in c:\dev\EntityFramework.MappingAPI\trunk\src\EntityFramework.MappingAPI\Mappings\DbMapping.cs:line 101 at EntityFramework.MappingAPI.EfMap.Get(DbContext context) in c:\dev\EntityFramework.MappingAPI\trunk\src\EntityFramework.MappingAPI\EfMap.cs:line 60 at EntityFramework.MappingAPI.Extensions.MappingApiExtensions.Db(DbContext ctx, Type type) in c:\dev\EntityFramework.MappingAPI\trunk\src\EntityFramework.MappingAPI\Extensions\MappingApiExtensions.cs:line 51 at […]

在EntityFramework中更新或删除多个实体的建议做法是什么?

在SQL中,有时可能会写一些类似的东西 DELETE FROM table WHERE column IS NULL 要么 UPDATE table SET column1=value WHERE column2 IS NULL 或可能适用于多行的任何其他标准。 据我所知,最好的EntityFramework可以做的就像 foreach (var entity in db.Table.Where(row => row.Column == null)) db.Table.Remove(entity); // or entity.Column2 = value; db.SaveChanges(); 但是当然会检索所有实体,然后为每个实体运行单独的DELETE查询。 当然,如果有许多实体满足标准,那肯定要慢得多。 因此,简而言之,EntityFramework是否支持在单个查询中更新或删除多个实体?

EntityFramework Mutli-Table多对多

我正在使用EF4.1 Code First,我正在尝试创建一些需要链接表的多对多关系表。 请参阅下面的小代码片段: class Event { int EventId { get; set; } ICollection Contacts { get; set; } } class Contact { int ContactId { get; set; } ICollection Relations { get; set; } } class Relation { int RelationId { get; set; } string Name { get; set; } } 因此,Contacts对象可以有许多不同类型的关系,例如“Mother”,“Father”,“Brother”等。 我需要跟踪联系人参加的某种活动,但我想知道他是如何与举办活动的人联系的。 例如,他是Eventer的兄弟,父亲还是丈夫? […]

有没有办法在lambda表达式树中使用`dynamic`?

一,规格。 我们使用MVC5,.NET 4.5.1和Entity框架6.1。 在我们的MVC5业务应用程序中,我们有很多重复的CRUD代码。 我的工作是“自动化”大部分内容,这意味着将其提取到基类并使其可重用。 现在,我有控制器,视图模型和EF6实体模型的基类。 我的抽象基类,所有EF6实体都inheritance: public abstract class BaseEntity where TSubclass : BaseEntity { public abstract Expression<Func> UpdateCriterion(); } UpdateCriterion方法用于数据库上下文的AddOrUpdate方法。 我有一个子类的generics参数,因为UpdateCriterion需要返回使用精确子类类型的lambda表达式,而不是接口或基类。 实现此抽象基类的极其简化的子类如下所示: public class Worker : BaseEntity { public int ID { get; set; } public int Name { get; set; } public override Expression<Func> UpdateCriterion() { return worker => worker.ID; } } […]

Linq to Entity从DateTime获取日期

var islemList =(来自entities中的isl .Islemler,其中( isl.KayitTarihi.Date > = dbas && isl.KayitTarihi.Value.Date <= dbit)select isl); 它给出了错误:LINQ to Entities不支持日期…如何在linq中获取日期。

Linq to Entities Group By(OUTER APPLY)“oracle 11.2.0.3.0不支持申请”

我在下面有代码示例查询产品列表。 var productResults = Products.Where((p) => refFilterSequence.Contains(p.Ref)) .GroupBy(g => g.Code, (key, g) => g.OrderBy(whp => whp.Ref).First()).ToList(); 这完全按预期工作,并在使用内存集合时返回我想要的4行,但是在针对Oracle数据库运行时: .GroupBy(g => g.Code, (key, g) => g.OrderBy(whp => whp.Ref).First()) 这会抛出一个错误,说我应该使用Oracle数据库不支持的FirstOrDefault 。 错误oracle 11.2.0.3.0不支持apply thrown。 谷歌在CodePlex上揭示了这一点: https : //entityframework.codeplex.com/workitem/910 。 使用以下二进制文件时会发生这种情况: EntityFramework 6.0.0.0 Oracle.ManagedDataAccess 4.121.2.0 Oracle.ManagedDataAccess.EntityFramework 6.121.2.0 .Net Framework 4.5.1 该数据库是Oracle 11.2.0.3.0数据库。 生成的sql使用OUTER APPLY(见下图),但11.2.0.3.0版本的Oracle不支持,那么为什么EF / Oracle.ManagedDataAccess会尝试使用它呢? 有没有办法告诉EF不要使用APPLY关键字? 下面的页面显示在Oracle 12c第1版中添加了APPLY支持,但我无法更新所有数据库只是为了使GROUP […]