データベースをチェックして、レコードが既に存在するかどうかを確認する機能があります。レコードが存在する場合はそのレコードの 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 つのフィールドをチェックして、レコードが存在するかどうかを確認します:DescriptionとDescriptionLong. 問題はデータベースに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ただし、関数は値をすべて無視するため、がデータベースにある場合DescriptionLongはNULL最初の If ステートメントを渡さず、関数は毎回新しいレコードを作成します。
基本的に私が望むのは、オプションのパラメーターDescriptionが beNULLまたは beのいずれかで> ""あり、データベースが一致するレコードの ID を返すか、新しいレコードを作成することです。がデータベース内にあり、関数内にある場合DescriptionLongは、同じ値を持つレコードがデータベースに既に存在するかどうかに関係なく、毎回新しいレコードが作成されます。NULLDescValNothing
私が見つけた別の解決策は、関数を単純に渡すことを許可すると機能するということですDescriptionが""、これは理想的ではありません。