-1

データベースをチェックして、レコードが既に存在するかどうかを確認する機能があります。レコードが存在する場合はそのレコードの ID を返し、存在しない場合は新しいレコードを作成して新しい ID を返します。

Friend Shared Function GetLogType(LogType As String, Optional Description As String = "")
    If GlobalVar.db.users.References.Count(Function(t) t.Description = LogType And t.DescriptionLong = Description) > 0 Then
        Return GlobalVar.db.users.References.First(Function(t) t.Description = LogType And t.DescriptionLong = Description).RefID
    Else
        Dim Ref As New Reference
        Ref.RefTypeID = 2
        Ref.Description = LogType
        Ref.DescriptionLong = Description
        Ref.Active = True
        Ref.CreateDate = Now
        Ref.UpdatedDate = Now
        GlobalVar.db.users.Entry(Ref).State = EntityState.Added
        GlobalVar.db.users.SaveChanges()
        Return GlobalVar.db.users.References.First(Function(t) t.Description = LogType And t.DescriptionLong = Description).RefID
    End If
End Function

この関数は、データベース内の 2 つのフィールドをチェックして、レコードが存在するかどうかを確認します:DescriptionDescriptionLong. 問題はデータベースにDescriptionLong存在することが許される場合がありますが、私の関数は新しいレコードを保存するときにforNULLの値を自動的に返します。""DescriptionLong

関数が値を入力してNULL値を確認できるようにするには、次のようにしNULLます。

Friend Shared Function GetLogType(LogType As String, Optional Description As String = "")
  Dim DescVal As String
  If Description = "" Then
    DescVal = Nothing
  Else
     DescVal = Description
  End If                

  If GlobalVar.db.users.References.Count(Function(t) t.Description = LogType And t.DescriptionLong = Description) > 0 Then
    Return GlobalVar.db.users.References.First(Function(t) t.Description = LogType And If(DescVal = Nothing, 1 = 1, t.DescriptionLong = DescVal)).RefID
  Else
    Dim Ref As New Reference
    Ref.RefTypeID = 2
    Ref.Description = LogType
    Ref.DescriptionLong = DescVal
    Ref.Active = True
    Ref.CreateDate = Now
    Ref.UpdatedDate = Now
    GlobalVar.db.users.Entry(Ref).State = EntityState.Added
    GlobalVar.db.users.SaveChanges()
    Return GlobalVar.db.users.References.First(Function(t) t.Description = LogType And If(DescVal = Nothing, 1 = 1, t.DescriptionLong = DescVal)).RefID
  End If
End Function

NULLただし、関数は値をすべて無視するため、がデータベースにある場合DescriptionLongNULL最初の If ステートメントを渡さず、関数は毎回新しいレコードを作成します。

基本的に私が望むのは、オプションのパラメーターDescriptionが beNULLまたは beのいずれかで> ""あり、データベースが一致するレコードの ID を返すか、新しいレコードを作成することです。がデータベース内にあり、関数内にある場合DescriptionLongは、同じ値を持つレコードがデータベースに既に存在するかどうかに関係なく、毎回新しいレコードが作成されます。NULLDescValNothing

私が見つけた別の解決策は、関数を単純に渡すことを許可すると機能するということですDescription""、これは理想的ではありません。

4

1 に答える 1