Hi,
I'm trying to implement support of mssql 2016 columnstore index feature by myself. I was hoping to modify upgrade actions via UpgradeHandler.OnBeforeExecuteActions, but I can't even reach this method in some cases because of exception.
For example, such code:
internal class Program
{
private static void Main(string[] args)
{
var dc = new DomainConfiguration("sqlserver", "Data Source=.; Initial Catalog=DO40-Tests; Integrated Security=True;")
{
UpgradeMode = DomainUpgradeMode.PerformSafely,
};
dc.Types.Register(typeof(Program).Assembly);
Domain.Build(dc);
}
}
[HierarchyRoot]
[Index("A")]
public class ASampleEntity : Entity
{
[Field, Key]
public Guid Id { get; set; }
[Field]
public int A { get; set; }
}
[HierarchyRoot]
[Index("A", Clustered = true)]
public class SampleEntity : Entity
{
[Field, Key]
public Guid Id { get; set; }
[Field]
public int A { get; set; }
[Field]
public string B { get; set; }
[Field]
public string C { get; set; }
}
throws this exception:
Unhandled Exception: System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection..
Parameter name: dbIndex
Server stack trace:
at Xtensive.Sql.Drivers.SqlServer.v09.ColumnResolver.GetColumn(Int32 dbIndex)
at Xtensive.Sql.Drivers.SqlServer.v09.Extractor.ExtractIndexes()
at Xtensive.Sql.Drivers.SqlServer.v09.Extractor.ExtractCatalogContents()
at Xtensive.Sql.Drivers.SqlServer.v11.Extractor.ExtractCatalogContents()
at Xtensive.Sql.Drivers.SqlServer.v09.Extractor.ExtractSchemes(String catalogName,
String[] schemaNames)
at Xtensive.Sql.SqlDriver.Extract(SqlConnection connection, IEnumerable`1 tasks)
at Xtensive.Orm.Providers.SqlExecutor.Extract(IEnumerable`1 tasks)
at Xtensive.Orm.Upgrade.SqlWorker.ExtractSchema(UpgradeServiceAccessor services, ISqlExecutor executor)
at Xtensive.Orm.Upgrade.SqlWorker.Run(UpgradeServiceAccessor services, SqlWorkerTask task)
at Xtensive.Orm.Upgrade.SqlWorker.<>c__DisplayClass1.<Create>b__0()
at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs)
at System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(IMessage msg, IMessageSink replySink)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.EndInvokeHelper(Message reqMsg, Boolean bProxyCase)
at System.Runtime.Remoting.Proxies.RemotingProxy.Invoke(Object NotUsed, MessageData& msgData)
at System.Func`1.EndInvoke(IAsyncResult result)
at Xtensive.Core.AsyncFutureResult`1.Get()
at Xtensive.Orm.Upgrade.UpgradingDomainBuilder.CompleteSqlWorker()
at Xtensive.Orm.Upgrade.UpgradingDomainBuilder.BuildMultistageDomain()
at Xtensive.Orm.Upgrade.UpgradingDomainBuilder.Run()
at Xtensive.Orm.Upgrade.UpgradingDomainBuilder.Build(DomainConfiguration configuration)
at Xtensive.Orm.Domain.Build(DomainConfiguration configuration)
at Sample.Program.Main(String[] args) in C:\Projects\CleanDO\Sample\Program.cs:line 23
on database with already set clustered columnstore index on table SampleEntity.
But if I remove index from ASampleEntity, or make nonclustered columnstore, or even add two any fields to ASampleEntity, it works!
I hope there is any workaround, because this forsing me to remove index every time i rebuild domain.
DO version - 5.0.13
asked
Sep 18 '17 at 05:02
Gushchin Anton
11●27●27●29