Database.SetInitializer を使用してデータベースを初期化しようとしていますが、イニシャライザ クラスが DBContext から継承すると、「型引数が制約型 'System.Data.Entity.DBContext から継承または実装されていません」というエラーが発生します。何か案は?ちなみに、Code First EF は初めてです。
コンテキスト クラス:
Imports System.Data.Entity
Imports System.Collections.Generic
Imports System.Data.Entity.Infrastructure
Imports System.Configuration
Public Class PropertyManagementContext
Inherits DbContext
#Region "Constructor"
Public Sub New()
MyBase.New("Data Source=WSBS2K3SQL;Initial Catalog=AQUARIUS_TEST;Persist Security Info=True;User ID=SomeUser;Password=SomePassword;")
End Sub
#End Region
#Region "Tables"
Public Complexes As DbSet(Of Complex)
Public Buildings As DbSet(Of Building)
Public Units As DbSet(Of Unit)
Public Tenants As DbSet(Of Tenant)
#End Region
Protected Overrides Sub OnModelCreating(modelBuilder As DbModelBuilder)
MyBase.OnModelCreating(modelBuilder)
'Set the Primary Keys
modelBuilder.Entity(Of Complex).HasKey(Function(c) c.ComplexId)
modelBuilder.Entity(Of Building).HasKey(Function(b) b.BuildingId).HasKey(Function(b) b.ComplexId)
modelBuilder.Entity(Of Unit).HasKey(Function(u) u.UnitId).HasKey(Function(u) u.BuildingId)
modelBuilder.Entity(Of Tenant).HasKey(Function(t) t.TenantId)
'Set Complex Primary Key to Identity(MS SQL Auto-Increment)
modelBuilder.Entity(Of Complex).Property(Function(c) c.ComplexId) _
.HasDatabaseGeneratedOption(ComponentModel.DataAnnotations.DatabaseGeneratedOption.Identity)
End Sub
End Class
初期化クラス:
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports System.Data.Entity
Public Class PropertyManagementInitializer
Inherits DropCreateDatabaseAlways(Of PropertyManagementContext)
Protected Overrides Sub Seed(context As PropertyManagementContext)
MyBase.Seed(context)
Dim complex As New Complex With {
.Name = "SomeComplex",
.City = "SomeCity",
.Address = "SomeStreet",
.PostalCode = "R2R2R2",
.Type = "1"
}
context.Complexes.Add(complex)
context.SaveChanges()
End Sub
End Class
Database.SetInitializer() が呼び出され、エラーが発生するメイン フォーム:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
Database.SetInitializer(Of PropertyManagementContext)(New PropertyManagementInitializer)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub