2012-11-09 7 views
0

Ceci est ma première base de données SQLiteDbLinq DbMetal - « La clé donnée était absente dans le dictionnaire » lors de l'ajout clé étrangère

CREATE TABLE [Categories] (
    [ParentId] INT, 
    [Name] VARCHAR(100)); 

CREATE TABLE [Fees] (
    [CategoryId] INT, 
    [Name] VARCHAR(100), 
    [Value] VARCHAR(50), 
    [Info] VARCHAR(200)); 

CREATE TABLE [Markups] (
    [CategoryId] INT, 
    [UpTo] MONEY, 
    [Value] VARCHAR(50), 
    [Info] VARCHAR(200)); 

Si je cours DbMetal /provider:Sqlite /conn "Data Source=bms4.db3" /dbml:Model.dbml, il va créer avec succès le fichier dbml.

Mais si j'ajoute une clé étrangère, telle que

CREATE TABLE [Fees] (
    [CategoryId] INT CONSTRAINT [fk_fees_categories] REFERENCES [Categories]([rowid]), 
    [Name] VARCHAR(100), 
    [Value] VARCHAR(50), 
    [Info] VARCHAR(200)); 

L'exécution de la même commande

DbMetal /provider:Sqlite /conn "Data Source=bms4.db3" /dbml:Model.dbml 

donnera cette erreur:

>>> Reading schema from SQLite database 
DbMetal: The given key was not present in the dictionary. 

Comment puis-je introduire un étranger Relation clé dans le DBML?

Répondre

0

Les clés étrangères sont vérifiées par rapport à une clé unique dans la contrainte. Vous n'avez pas déclaré de clé primaire ou de clé unique, vous devez donc commencer par cela (il est recommandé de s'assurer que chaque table possède une clé primaire)

+0

Vous avez raison, je dois ajouter explicitement un champ d'auto-incrémentation . Pourquoi ROWID ne fonctionne-t-il pas? – Aximili

Questions connexes