DbLinq DbMetal - "The given key was not present in the dictionary" when adding Foreign Key

495 views Asked by At

This is my initial SQLite database

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));

If I run DbMetal /provider:Sqlite /conn "Data Source=bms4.db3" /dbml:Model.dbml, it will successfully create the dbml file.

But if I add a Foreign Key, such that

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

Running the same command

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

will give this error:

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

How can I introduce a Foreign Key relationship into the DBML?

1

There are 1 answers

1
mmmmmm On BEST ANSWER

Foreign keys are checked against a unique key in the constraint. You have not declared a primary key or unique key so you need to start by doing that (It is good practice to make sure that each table has a primary key)