Ik heb een bestaande MySQL database met een tabel met auto's. Deze tabel is niks meer dan een lijstje (Id, CarName) en wordt door een flink aantal verschillende applicaties gebruikt.
Nu wil ik graag een nieuwe database maken voor een nieuwe applicatie, maar in deze database wil ik foreign keys gebruiken naar de 'Cars' tabel in de oude database. In deze nieuwe applicatie heb ik het lijstje auto's enkel read-only nodig (misschien is dat belangrijk), ik wil gewoon voorkomen dat ik de tabel moet dupliceren in de nieuwe database omdat ik dan twee tabellen bijgewerkt moet houden (ik moet er regelmatig auto's aan toevoegen).
Ik lees overal (voorbeeld) dat MySQL prima foreign keys tussen twee databases ondersteunt en dat dat met SQL gewoon kan door de naam van de tabel er voor te stoppen; iets als "REFERENCES anderedb.Cars(Id)".
Ik wil deze nieuwe database echter code-first aanmaken via Entity Framework, en ook graag code-first bijhouden dmv migrations. Deze stap wil me niet lukken. In de migrations die Entity Framework aanmaakt heb ik volgens mij helemaal geen mogelijkheid om een andere database naam in te vullen. Ik probeer daarom de migrations gewoon handmatig aan te passen voordat ik het update-database commando doorvoer. Dit wel echter ook niet lukken...
EF genereert bijvoorbeeld de volgende migration code:
Hier maak ik dan handmatig het volgende van (verschil in regel 12):
Tijdens 'update-database' krijg ik echter de foutmelding:
The Foreign Key on table 'dbo.laptimes' with columns 'CarId' could not be created because the principal key columns could not be determined. Use the AddForeignKey fluent API to fully specify the Foreign Key.
Tenzij ik me heel erg vergis kan ik met de Fluent API ook geen andere database ingeven?
Ik heb ook geprobeerd om er "AndereDatabase.dbo.cars" van te maken maar dat pakt hij ook niet want dat is geen geldige tabel naam meer.
Database names must be of the form [<schema_name>.]<object_name>.
Is dit gewoon niet mogelijk?
Hoe kan ik dit toch voor elkaar krijgen?
Nu wil ik graag een nieuwe database maken voor een nieuwe applicatie, maar in deze database wil ik foreign keys gebruiken naar de 'Cars' tabel in de oude database. In deze nieuwe applicatie heb ik het lijstje auto's enkel read-only nodig (misschien is dat belangrijk), ik wil gewoon voorkomen dat ik de tabel moet dupliceren in de nieuwe database omdat ik dan twee tabellen bijgewerkt moet houden (ik moet er regelmatig auto's aan toevoegen).
Ik lees overal (voorbeeld) dat MySQL prima foreign keys tussen twee databases ondersteunt en dat dat met SQL gewoon kan door de naam van de tabel er voor te stoppen; iets als "REFERENCES anderedb.Cars(Id)".
Ik wil deze nieuwe database echter code-first aanmaken via Entity Framework, en ook graag code-first bijhouden dmv migrations. Deze stap wil me niet lukken. In de migrations die Entity Framework aanmaakt heb ik volgens mij helemaal geen mogelijkheid om een andere database naam in te vullen. Ik probeer daarom de migrations gewoon handmatig aan te passen voordat ik het update-database commando doorvoer. Dit wel echter ook niet lukken...
EF genereert bijvoorbeeld de volgende migration code:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| CreateTable( "dbo.laptimes", c => new { Id = c.Int(nullable: false, identity: true), UserId = c.Int(nullable: false), CarId = c.Int(nullable: false), Time = c.Int(nullable: false), Fuel = c.Single(nullable: false), }) .PrimaryKey(t => t.Id) .ForeignKey("dbo.cars", t => t.CarId, cascadeDelete: true) .ForeignKey("dbo.users", t => t.UserId, cascadeDelete: true) .Index(t => t.UserId) .Index(t => t.CarId) |
Hier maak ik dan handmatig het volgende van (verschil in regel 12):
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| CreateTable( "dbo.laptimes", c => new { Id = c.Int(nullable: false, identity: true), UserId = c.Int(nullable: false), CarId = c.Int(nullable: false), Time = c.Int(nullable: false), Fuel = c.Single(nullable: false), }) .PrimaryKey(t => t.Id) .ForeignKey("AndereDatabase.cars", t => t.CarId, cascadeDelete: true) .ForeignKey("dbo.users", t => t.UserId, cascadeDelete: true) .Index(t => t.UserId) .Index(t => t.CarId) |
Tijdens 'update-database' krijg ik echter de foutmelding:
The Foreign Key on table 'dbo.laptimes' with columns 'CarId' could not be created because the principal key columns could not be determined. Use the AddForeignKey fluent API to fully specify the Foreign Key.
Tenzij ik me heel erg vergis kan ik met de Fluent API ook geen andere database ingeven?
Ik heb ook geprobeerd om er "AndereDatabase.dbo.cars" van te maken maar dat pakt hij ook niet want dat is geen geldige tabel naam meer.
Database names must be of the form [<schema_name>.]<object_name>.
Is dit gewoon niet mogelijk?
Hoe kan ik dit toch voor elkaar krijgen?