Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Petr Čech
Tvůrce
Avatar
Petr Čech:19.5.2014 21:51

Ahoj, už mnohokrát jsem narazil na problém, že se migrace zasekne buď hned po

Add-Migration MyMigration

nebo při

Update-Database

.
To jsem už tak nějak vyřešil, ale stejně se mi to zdá 1. neuvěřitelně neohrabané, 2. občas je docela problém, když se to někde v půlce zasekne. To ale není na co se ptám :D problém je v tom, že tenhle kód

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace Blog.Models
{
    public class Article
    {
        [Key]
        [Required]
        [Display(Name = "url")]
        public string Url { get; set; }

        [Required(ErrorMessage = "Je nutné zadat kategorii")]
        [MaxLength(25)]
        [Display(Name = "kategorie")]
        public string Category { get; set; }

        [Required(ErrorMessage = "je nutná barva")]
        [StringLength(6)]
        [Display(Name = "barva kategorie")]
        public string CategoryColor { get; set; }

        [Required(ErrorMessage = "Je nutné zadat název")]
        [MaxLength(100)]
        [Display(Name = "název")]
        public string Title { get; set; }

        [Required(AllowEmptyStrings = true)]
        public DateTime Released { get; set; }

        [Required(ErrorMessage = "je nutné zadat popisek")]
        [Display(Name = "popisek")]
        [MaxLength(500)]
        public string Description { get; set; }

        [AllowHtml]
        [Required(ErrorMessage = "je nutné napsat článek")]
        [Display(Name = "článek")]
        [MinLength(100)]
        public string Content { get; set; }

        public Article()
        {
            Released = DateTime.Today;
        }
    }
}

se chová tak, že se nenechá uložit, prostě vypíše error message jako že jsem to nezadal i když to zadám.
Má někdo ponětí, jak to vyřešit?

Odpovědět
19.5.2014 21:51
the cake is a lie
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Petr Čech
Jan Vargovský:19.5.2014 22:00

Odpíchni se od té chyby, určitě ti napíše přesně co jsi nezadal :)

 
Nahoru Odpovědět
19.5.2014 22:00
Avatar
Petr Čech
Tvůrce
Avatar
Petr Čech:19.5.2014 22:04

Je to ještě o něco horší, ty data se posílají, ale ignoruje je to a dělá jako že tam nejsou. Konkrétně se jedná o vlastnosti Category a CategoryColor. o_O

Nahoru Odpovědět
19.5.2014 22:04
the cake is a lie
Avatar
Odpovídá na Petr Čech
Michal Štěpánek:20.5.2014 10:58

A máš v té tabulce Article nějaké ID, podle kterého by se záznamy určovaly?
Category se píše ručně název? proč to tam je?

Nahoru Odpovědět
20.5.2014 10:58
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Michal Štěpánek
Petr Čech:20.5.2014 11:34

Jako ID používám Url, ale teď to dokonce nejde updatnout- píše(na update-database)

PM> Add-Migration add
Scaffolding migration 'add'.
The Designer Code for this migration file includes a snapshot of your current Code First model. This snapshot is used to calculate the changes to your model when you scaffold the next migration. If you make additional changes to your model that you want to include in this migration, then you can re-scaffold it by running 'Add-Migration add' again.
PM> Update-Database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying explicit migrations: [201405200930516_add].
Applying explicit migration: 201405200930516_add.
System.Data.SqlClient.SqlException (0x80131904): The object 'DF__Articles__Color__48CFD27E' is dependent on column 'Color'.
ALTER TABLE ALTER COLUMN Color failed because one or more objects access this column.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite)
   at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
   at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<NonQuery>b__0(DbCommand t, DbCommandInterceptionContext`1 c)
   at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func`3 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed)
   at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand command, DbCommandInterceptionContext interceptionContext)
   at System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery()
   at System.Data.Entity.Migrations.DbMigrator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement, DbInterceptionContext interceptionContext)
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement, DbInterceptionContext interceptionContext)
   at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable`1 migrationStatements, DbTransaction transaction, DbInterceptionContext interceptionContext)
   at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable`1 migrationStatements, DbConnection connection)
   at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClass30.<ExecuteStatements>b__2e()
   at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1.<Execute>b__0()
   at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)
   at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation)
   at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable`1 migrationStatements, DbTransaction existingTransaction)
   at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable`1 migrationStatements)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable`1 migrationStatements)
   at System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, XDocument targetModel, IEnumerable`1 operations, IEnumerable`1 systemOperations, Boolean downgrading, Boolean auto)
   at System.Data.Entity.Migrations.DbMigrator.ApplyMigration(DbMigration migration, DbMigration lastMigration)
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ApplyMigration(DbMigration migration, DbMigration lastMigration)
   at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   at System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)
   at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClassc.<Update>b__b()
   at System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration)
   at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run()
   at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
   at System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force)
   at System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
   at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
ClientConnectionId:300a0993-8a38-48ba-88f0-d4b262080afb
The object 'DF__Articles__Color__48CFD27E' is dependent on column 'Color'.
ALTER TABLE ALTER COLUMN Color failed because one or more objects access this column.
Nahoru Odpovědět
20.5.2014 11:34
the cake is a lie
Avatar
Odpovídá na Petr Čech
Michal Štěpánek:21.5.2014 7:33

tady ti to píše, proč to neprovedl...

ALTER TABLE ALTER COLUMN Color failed because one or more objects access this column.

Nemůžeš měnit strukturu, resp. typ dat sloupce, když v něm máš data...

Editováno 21.5.2014 7:34
Nahoru Odpovědět
21.5.2014 7:33
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Michal Štěpánek
Petr Čech:21.5.2014 20:51

To je právě ten problém, nenechá mě to (nebo to neumím) ty data odstranit a ta migrace se stejně někdy rozbije. :(

Nahoru Odpovědět
21.5.2014 20:51
the cake is a lie
Avatar
Odpovídá na Petr Čech
Michal Štěpánek:22.5.2014 7:37

A ty máš v té tabulce nějaké cizí klíče z jiné tabulky? Která data tě to nechce nechat odstranit?

Nahoru Odpovědět
22.5.2014 7:37
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.