如何解决如何在 MVC C# 中的模型中设置配对键
我有一个 LenguajesPorProyecto 模型,PK 是 ProyectoId 和 LenguajeId 属性:
public class LenguajesPorProyecto
{
public int LenguajeId { get; set; }
public Lenguaje Lenguaje { get; set; }
public int ProyectoId { get; set; }
public Proyecto Proyecto { get; set; }
[StringLength(1)]
public char Nivel { get; set; }
}
在 fluent api 中的这个限制:
modelBuilder.Entity<LenguajesPorProyecto>()
.HasKey(lp => new { lp.LenguajeId,lp.ProyectoId });
var lenguajesXProyectos = new List<LenguajesPorProyecto> {
new LenguajesPorProyecto{LenguajeId=1,ProyectoId=1,Nivel='A'},new LenguajesPorProyecto{LenguajeId=2,Nivel='A'}
};
当我执行数据库迁移时,我希望数据库表接受这两个项目,因为 1,1 和 1,2 对是不同的。我需要约束不仅在 ProyectoId 中同时出现在两个属性中。
控制台消息:
fail: Microsoft.EntityFrameworkCore.Database.Command[20102] Failed executing DbCommand (16ms) [Parameters=[],CommandType='Text',CommandTimeout='30'] CREATE UNIQUE INDEX [IX_LenguajesPorProyectos_ProyectoId] ON [LenguajesPorProyectos] ([ProyectoId]); Failed executing DbCommand (16ms) [Parameters=[],CommandTimeout='30'] CREATE UNIQUE INDEX [IX_LenguajesPorProyectos_ProyectoId] ON [LenguajesPorProyectos] ([ProyectoId]); Microsoft.Data.sqlClient.sqlException (0x80131904): La instrucción CREATE UNIQUE INDEX terminó porque se encontró una clave duplicada para el nombre de objeto 'dbo.LenguajesPorProyectos' y el nombre de índice 'IX_LenguajesPorProyectos_ProyectoId'. El valor de la clave duplicada es (1). Se terminó la instrucción. at Microsoft.Data.sqlClient.sqlConnection.OnError(sqlException exception,Boolean breakConnection,Action
1 wrapCloseInAction)
在 Microsoft.Data.sqlClient.sqlInternalConnection.OnError(sqlException 异常,布尔 breakConnection,Action1 wrapCloseInAction) at Microsoft.Data.sqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,Boolean callerHasConnectionLock,Boolean asyncclose) at Microsoft.Data.sqlClient.TdsParser.TryRun(RunBehavior runBehavior,sqlCommand cmdHandler,sqlDataReader dataStream,BulkcopySimpleResultSet bulkcopyHandler,TdsParserStateObject stateObj,Boolean& dataReady) at Microsoft.Data.sqlClient.sqlCommand.RunExecuteNonQueryTds(String methodName,Boolean isAsync,Int32 timeout,Boolean asyncWrite) at Microsoft.Data.sqlClient.sqlCommand.InternalExecuteNonQuery(taskcompletionsource
1 完成,布尔 sendToPipe,Int32 超时,Boolean&usedCache,Boolean asyncWrite,Boolean inRetry,String methodName)
在 Microsoft.Data.sqlClient.sqlCommand.ExecuteNonQuery()
在 Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteNonQuery(RelationalCommandParameterObject parameterObject)
在 Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteNonQuery(IRelationalConnection 连接,IReadOnlyDictionary2 parameterValues) at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQuery(IEnumerable
1 迁移命令,IRelationalConnection 连接)
在 Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
在 Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration,String contextType)
在 Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabaseImpl(String targetMigration,String contextType)
在 Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.c__displayClass0_0.<.ctor>b__0()
在 Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
ClientConnectionId:f23a20d1-ce3d-4a9b-9112-83f84b4ae238
错误编号:1505,状态:1,类别:16
La instrucción CREATE UNIQUE INDEX terminó porque se encontró una clave duplicada para el nombre de objeto 'dbo.LenguajesPorProyectos' y el nombre de índice 'IX_LenguajesPorProyectos_ProyectoId'。 El valor de la clave duplicada es (1).
设置说明。`
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。