データベースをチェックして、レコードが既に存在するかどうかを確認する機能があります。レコードが存在する場合はそのレコードの 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
は、同じ値を持つレコードがデータベースに既に存在するかどうかに関係なく、毎回新しいレコードが作成されます。NULL
DescVal
Nothing
私が見つけた別の解決策は、関数を単純に渡すことを許可すると機能するということですDescription
が""
、これは理想的ではありません。