Сравнение данных

Для Entity Framework 5.0.0.0 - 6.1.3

Вы действительно хотите сделать следующее:

1. using System.Data.Entity;   to startup file (console app --> Program.cs / mvc --> global.asax
2. Database.SetInitializer<YourDatabaseContext>(null);

Да, Matt Frear верен. UPDATE -EDIT: Предостережение заключается в том, что я согласен с другими в том, что вместо добавления этого кода в global.asax добавлен в ваш класс DbContext

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    // other code 
    Database.SetInitializer<YOURContext>(null);
    // more code
}

. Как уже отмечалось, это хорошо для обработки модульного тестирования.

В настоящее время я использую это с Entity Framework 6.1.3 /.net 4.6.1

5
задан Brian Tompsett - 汤莱恩 21 October 2015 в 18:26
поделиться

5 ответов

Вот что-то, что я записал для почти идентичного стека (мы должны были стандартизировать названия производителя аппаратных средств и были все виды изменений). Это - сторона клиента, хотя (VB.Net, чтобы быть точным) - и используют алгоритм расстояния Левенштейна (измененный для лучших результатов):

    Public Shared Function FindMostSimilarString(ByVal toFind As String, ByVal ParamArray stringList() As String) As String
        Dim bestMatch As String = ""
        Dim bestDistance As Integer = 1000 'Almost anything should be better than that!

        For Each matchCandidate As String In stringList
            Dim candidateDistance As Integer = LevenshteinDistance(toFind, matchCandidate)
            If candidateDistance < bestDistance Then
                bestMatch = matchCandidate
                bestDistance = candidateDistance
            End If
        Next

        Return bestMatch
    End Function

    'This will be used to determine how similar strings are.  Modified from the link below...
    'Fxn from: http://ca0v.terapad.com/index.cfm?fa=contentNews.newsDetails&newsID=37030&from=list
    Public Shared Function LevenshteinDistance(ByVal s As String, ByVal t As String) As Integer
        Dim sLength As Integer = s.Length ' length of s
        Dim tLength As Integer = t.Length ' length of t
        Dim lvCost As Integer ' cost
        Dim lvDistance As Integer = 0
        Dim zeroCostCount As Integer = 0

        Try
            ' Step 1
            If tLength = 0 Then
                Return sLength
            ElseIf sLength = 0 Then
                Return tLength
            End If

            Dim lvMatrixSize As Integer = (1 + sLength) * (1 + tLength)
            Dim poBuffer() As Integer = New Integer(0 To lvMatrixSize - 1) {}

            ' fill first row
            For lvIndex As Integer = 0 To sLength
                poBuffer(lvIndex) = lvIndex
            Next

            'fill first column
            For lvIndex As Integer = 1 To tLength
                poBuffer(lvIndex * (sLength + 1)) = lvIndex
            Next

            For lvRowIndex As Integer = 0 To sLength - 1
                Dim s_i As Char = s(lvRowIndex)
                For lvColIndex As Integer = 0 To tLength - 1
                    If s_i = t(lvColIndex) Then
                        lvCost = 0
                        zeroCostCount += 1
                    Else
                        lvCost = 1
                    End If
                    ' Step 6
                    Dim lvTopLeftIndex As Integer = lvColIndex * (sLength + 1) + lvRowIndex
                    Dim lvTopLeft As Integer = poBuffer(lvTopLeftIndex)
                    Dim lvTop As Integer = poBuffer(lvTopLeftIndex + 1)
                    Dim lvLeft As Integer = poBuffer(lvTopLeftIndex + (sLength + 1))
                    lvDistance = Math.Min(lvTopLeft + lvCost, Math.Min(lvLeft, lvTop) + 1)
                    poBuffer(lvTopLeftIndex + sLength + 2) = lvDistance
                Next
            Next
        Catch ex As ThreadAbortException
            Err.Clear()
        Catch ex As Exception
            WriteDebugMessage(Application.StartupPath , [Assembly].GetExecutingAssembly().GetName.Name.ToString, MethodBase.GetCurrentMethod.Name, Err)
        End Try

        Return lvDistance - zeroCostCount
    End Function
4
ответ дан 13 December 2019 в 19:39
поделиться

Существуют многие поставщики там что продукты предложения, чтобы сделать этот вид сопоставления с образцом. Я провел бы некоторое исследование и нашел бы хороший, хорошо сочтенный продукт и фрагментировал бы систему собственной разработки.

Как Вы говорите, Ваш продукт только хорош, и это - достаточно общая потребность в компаниях, что я уверен, что там существует больше чем один превосходный продукт. Даже если это будет стоить нескольких тысяч маркеров за лицензию, то все еще будет более дешево, чем оплата набора разработчиков работать над чем-то внутренним.

Кроме того, то, что "сложные" фразы, "интенсивный ЦП", "код VBA" и "база данных Access" появляются вместе в описании Вашей системы, является другой причиной найти хорошую стороннюю программу.

Править: также возможно, что.NET имеет встроенный компонент, который делает такого рода вещь, в этом случае Вы не должны были бы платить за него. Я все еще удивлен время от времени инструментами, что.NET предлагает.

2
ответ дан 13 December 2019 в 19:39
поделиться

SSIS (в Sql 2005 + Предприятие) имеет Нечеткий Поиск, который разработан для просто таких проблем чистки данных.

Кроме этого, я только знаю о зависящих от домена решениях - таких как очистка адреса или общие методы сопоставления строк.

2
ответ дан 13 December 2019 в 19:39
поделиться

Доступ действительно не имеет инструментов для этого. В идеальном мире я пошел бы с решением SSIS и использовал бы нечеткий поиск. Но если Вы в настоящее время используете Доступ, возможности Вашего офиса, покупая Версию для предприятий SQL Server кажутся низкими мне. Если Вы застреваете с текущей средой, Вы могли бы попробовать метод решения "в лоб".

Запустите со стандартизированной чистки адресов. Выберите стандартные сокращения для улицы, raod, и т.д. и напишите код для изменения всех нормальных изменений на тех стандартный addesses. Замените любые экземпляры двух пробелов с одним пространством, обрежьте все данные и удалите любые неалфавитно-цифровые символы. Поскольку Вы видите, что это - настоящая задача.

Что касается названий компаний, возможно, можно попытаться соответствовать на первых 5 символах имени и адреса или телефона. Вы могли также составить таблицу известных изменений и чего они коснутся в Вашей базе данных для использования для cleanising будущих файлов. Таким образом, если Вы записываете с идентификатором 100, Acme, Inc., у Вас могла бы быть таблица как это:

Имя idfield

100 Acme, Inc.

100 Acme, Inc

100 высших точек, объединенных

100 высших точек, LLC

100 Высших точек

Это начнет с малого, но создавать со временем при создании записи каждым разом, когда Вы находите и чините дубликат (сделайте это частью Вас процесс дедупликации), и если Вы делаете запись каждым разом, когда Вы можете соответствовать первой части имени и адреса к существующей компании.

Я также посмотрел бы на тот функциональный отправленный Torial и видел бы, помогает ли он.

Все это было бы болезненным и трудоемким, но будет поправляться со временем, поскольку Вы находите новые изменения и добавляете их к коду или списку. Если Вы действительно решаете к stardardize свой addressdata, удостоверьтесь, что убрали производственные данные сначала, то сделайте любой импорт в рабочую таблицу и уберите их, то попытайтесь соответствовать к производственным данным и вставить новые записи.

1
ответ дан 13 December 2019 в 19:39
поделиться

Я имею дело с точно той же проблемой. Смотрите на:

Инструменты для соответствия имени/адресным сведениям

для некоторых инструментов, которые могли бы помочь.

2
ответ дан 13 December 2019 в 19:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: