微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 MVC C# 中的模型中设置配对键

如何解决如何在 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,Action1 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(taskcompletionsource1 完成,布尔 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(IEnumerable1 迁移命令,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 举报,一经查实,本站将立刻删除。