Sequence包含多个匹配元素 – 使用Entiity Framework添加项目

我用谷歌搜索了这个,并没有得到任何答案,我的特殊情况。

这显示了我得到的例外情况。

我以一种简单的方式使用entity framework。 我正在尝试将记录添加到Memberproduct表中。 但是我得到了一个没有意义的例外。

任何想法在这里有什么问题?

MemberProduct类:

public class MemberProduct :ISaleable { public void ProcessSale() { throw new NotImplementedException(); } private int id { get; set; } private string productName { get; set; } private decimal price { get; set; } private TaxClass taxClass { get; set; } private int quantity { get; set; } private Member memberAssociation { get; set; } public TaxClass TaxClass { get { return this.taxClass; } set { this.taxClass = value; } } public int Quantity { get { return this.quantity; } set { this.quantity = value; } } public string ProductName { get { return this.productName; } set { this.productName = value; } } public decimal Price { get { return this.price; } set { this.price = value; } } public Member MemberAssociation { get { return this.memberAssociation; } set { this.memberAssociation = value; } } public int ID { get { return this.id; } set { this.id = value; } } } 

堆栈跟踪:

  at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source, Func`2 predicate) at System.Data.Entity.ModelConfiguration.Conventions.IdKeyDiscoveryConvention.IdKeyDiscoveryConventionImpl.MatchKeyProperty(EdmEntityType entityType, IEnumerable`1 primitiveProperties) at System.Data.Entity.ModelConfiguration.Conventions.KeyDiscoveryConvention.System.Data.Entity.ModelConfiguration.Conventions.IEdmConvention.Apply(EdmEntityType entityType, EdmModel model) at System.Data.Entity.ModelConfiguration.Conventions.IdKeyDiscoveryConvention.System.Data.Entity.ModelConfiguration.Conventions.IEdmConvention.Apply(EdmEntityType entityType, EdmModel model) at System.Data.Entity.ModelConfiguration.Configuration.ConventionsConfiguration.EdmConventionDispatcher.Dispatch[TEdmDataModelItem](TEdmDataModelItem item) at System.Data.Entity.ModelConfiguration.Configuration.ConventionsConfiguration.EdmConventionDispatcher.VisitEdmEntityType(EdmEntityType item) at System.Data.Edm.Internal.DataModelItemVisitor.VisitCollection[T](IEnumerable`1 collection, Action`1 visitMethod) at System.Data.Edm.Internal.EdmModelVisitor.VisitEntityTypes(EdmNamespace edmNamespace, IEnumerable`1 entityTypes) at System.Data.Edm.Internal.EdmModelVisitor.VisitEdmNamespace(EdmNamespace item) at System.Data.Entity.ModelConfiguration.Configuration.ConventionsConfiguration.EdmConventionDispatcher.VisitEdmNamespace(EdmNamespace item) at System.Data.Edm.Internal.DataModelItemVisitor.VisitCollection[T](IEnumerable`1 collection, Action`1 visitMethod) at System.Data.Edm.Internal.EdmModelVisitor.VisitNamespaces(EdmModel model, IEnumerable`1 namespaces) at System.Data.Edm.Internal.EdmModelVisitor.VisitEdmModel(EdmModel item) at System.Data.Entity.ModelConfiguration.Configuration.ConventionsConfiguration.EdmConventionDispatcher.VisitEdmModel(EdmModel item) at System.Data.Entity.ModelConfiguration.Configuration.ConventionsConfiguration.EdmConventionDispatcher.Dispatch() at System.Data.Entity.ModelConfiguration.Configuration.ConventionsConfiguration.ApplyModel(EdmModel model) at System.Data.Entity.DbModelBuilder.Build(DbProviderManifest providerManifest, DbProviderInfo providerInfo) at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection) at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input) at System.Data.Entity.Internal.LazyInternalContext.InitializeContext() at System.Data.Entity.Internal.InternalContext.Initialize() at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() at System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName) at System.Data.Entity.Internal.Linq.InternalSet`1.Add(Object entity) at System.Data.Entity.DbSet`1.Add(TEntity entity) at Nautix_EPOS.Controllers.HomeController.Index() in C:\sites\EPOS\Nautix EPOS\Nautix EPOS\Controllers\HomeController.cs:line 19 at lambda_method(Closure , ControllerBase , Object[] ) at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) at System.Web.Mvc.ControllerActionInvoker.c__DisplayClass15.b__12() at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) 

我可以重复你的问题。 您的MemberProduct两个具有不同大小写的Id属性:

 public class MemberProduct { public int Id { get; set; } public int ID { get; set; } } 

EF代码首先在映射期间使用约定。 其中一个惯例是它将名为IdTypenameId属性视为主键(如果不使用Key属性或自定义映射),并且因为它不敏感地执行属性名称比较,它会抛出exception。

删除其中一个属性,它应该工作。

如果它对任何人有用:

从存储过程使用EF填充模型时收到此错误。 存储过程返回多个列,其中两列具有相同的别名/名称。

我怀疑EF对两个ID属性感到困惑。

将您的私有属性更改为字段; 应该解决它。

在初始播种时错误地设置实体状态信息时出现此序列错误。 只需确保正确设置对象图的状态。 我的问题是播种数据(不是在实际的应用程序运行期间)…无论如何,如果它们在运行更新时遇到序列错误(例如“序列包含多个匹配元素”)将帮助任何人,这是我的答案-database命令用于迁移。 虽然你在种子方法之外得到这个错误,但我认为你的答案可能在于实体状态正确设置了对象图。

entity framework代码首先AddOrUpdate方法插入重复值

要获得有关正确设置实体对象图的帮助,请参阅以下博客文章,这是我在正确设置对象状态时发现的最佳信息:

http://blog.longle.net/2013/05/11/genericizing-the-unit-of-work-pattern-repository-pattern-with-entity-framework-in-mvc/