我使用EF6代码优先,并且有一个User
类,它需要与其他用户有传入和传出连接。连接也有属性,所以我也有一个Connections
类。EF代码优先:序列包含多个匹配元素
public class User
{
public int ID { get; set; }
// Other properties removed here to keep it simple
[InverseProperty("SourceUser")]
public virtual ICollection<Connection> OutgoingConnections { get; set; }
[InverseProperty("DestUser")]
public virtual ICollection<Connection> IncomingConnections { get; set; }
}
public class Connection
{
public int ID { get; set; }
// Other properties removed here to keep it simple
[InverseProperty("OutgoingConnections")]
public User SourceUser { get; set; }
[InverseProperty("IncomingConnections")]
public User DestUser { get; set; }
}
更新我的数据库时出现以下错误。最初我没有InverseProperty
属性,所以我可以理解为什么EF不知道该怎么做。文档听起来像这些属性是我想要的 - 但它仍然无法正常工作。但也许我误解了它。
我想用一个Users
表结束,和Connections
表所在的Connections
表有ID
,SourceUserID
,DestUserID
(很明显,FK约束)。
任何想法?
指定'-Verbose'标志来查看应用到目标数据库的SQL语句 。应用显式迁移: [201411192045091_InitialCreate]。应用显式迁移: 201411192045091_InitialCreate。 System.InvalidOperationException: 序列在 System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer含有 System.Linq.Enumerable.SingleOrDefault [TSource](IEnumerable的
1 source, Func
2谓词)多于一个的匹配元素。 <> c__DisplayClass250.b__247(<> f__AnonymousType2b2 <>h__TransparentIdentifier242) at System.Linq.Enumerable.WhereSelectEnumerableIterator
2.MoveNext()
在System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext()
1..ctor(IEnumerable的
at System.Collections.Generic.List1 collection)
1源)在 System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer。 DIFF(ModelMetadata 源,ModelMetadata目标,懒惰 modificationCommandTreeGenerator,migrationSqlGenerator migrationSqlGenerator,字符串sourceModelVersion,字符串 targetModelVersion)在 System.Data.Entity.Migrations.DbMigrator.IsModelOutOfDate(的XDocument 模型,DbMigration lastMigration)在 系统.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable的 pendingMigrations,字符串targetMigrationId,字符串lastMigrationId)
at System.Linq.Enumerable.ToList[TSource](IEnumerable
在System.Data.Entity.Migrations.DbMigrator.UpdateInternal(字符串 targetMigration)在 System.Data.Entity的。 Migrations.DbMigrator。 <> c__DisplayClassc.b__b() 在 System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(动作 mustSucceedToKeepDatabase)处 系统 System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(动作 mustSucceedToKeepDatabase)。 Data.Entity.Migrations.DbMigrator.Update(字符串 targetMigration)处 System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(字符串 targetMigration)。运行() at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)at Sys tem.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
at System.Data.Entity.Migrations.Design.ToolingFacade。运行(BaseRunner 转轮)在 System.Data.Entity.Migrations.Design.ToolingFacade.Update(字符串 targetMigration,布尔力)在 System.Data.Entity.Migrations.UpdateDatabaseCommand。 <> c__DisplayClass2。 < .ctor> b__0() 在 System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(动作 命令)序列包含一个以上的匹配元件
http://msdn.microsoft.com/en-us/data/jj591583.aspx有你读这篇文章的代码,第一逆属性 – MethodMan 2014-12-01 21:16:24
是的,这就是我听到我使用的InverseProperty 。也许我错误地阅读它? – Dan 2014-12-01 21:22:51