Исключение ограничения DataTable для разных значений в первичном столбце - PullRequest
0 голосов
/ 05 сентября 2018

Установка первичного ключа означает, что значения столбцов должны быть уникальными.

Кажется, DataTable не заставляет ключ быть другим , но он сравнивается как ненулевой , используя правила сравнения DataTable.Locale.

DataTable.Locale.CompareInfo.Compare может возвращать 0, даже если строки различаются, так как они сортируют одинаково.

Есть ли способ изменить поведение? Я не мог найти, как заменить CompareInfo.

Пример данных, которые я имею, включает некоторые символы из категории UnicodeCategory.OtherNotAssigned .

using System;
using System.Data;

namespace datatabletest
{
    class Program
    {
        static void Main( string[] args )
        {
            string key = "key";
            string metric = "metric";

            string key1 = "\u0a0dtest\u0a0d;";
            string key2 = "test\u0a0d;";

            DataTable table = new DataTable("table");

            table.Columns.Add( key);
            table.Columns.Add( metric );
            table.PrimaryKey = new[] { table.Columns[key] };

            table.BeginLoadData();

            {
                DataRow row = table.NewRow();
                row[key] = key1;
                row[metric] = "500";
                table.Rows.Add( row );
            }

            {
                DataRow row = table.NewRow();
                row[key] = key2;
                row[metric] = "500";
                table.Rows.Add( row );
            }

            // strings are different
            Console.WriteLine( key1 ==  key2 );

            //but they compare method still returns 0
            Console.WriteLine( table.Locale.CompareInfo.Compare( key1, key2 ) );

            // throws a ConstraintException
            table.EndLoadData();
        }
    }
}
...