为什么Entity Framework Core不会将新记录保存到具有外键的SQLite表中?

时间:2017-03-02 04:44:12

标签: c# database entity-framework sqlite entity-framework-core

我创建了一个以下简单的SQLite数据库用于实验目的:

CREATE TABLE "cities" 
(
    `id`    INTEGER PRIMARY KEY AUTOINCREMENT,
    `name`  TEXT UNIQUE
);    

CREATE TABLE `people` 
(
    `id`    INTEGER PRIMARY KEY AUTOINCREMENT,
    `city`  INTEGER,
    `name`  TEXT,
    `surname`   TEXT,
    FOREIGN KEY(`city`) REFERENCES `cities`(`id`)
);

然后我使用了@erikej的SQLite Toolbox来生成模型代码。

之后,以下代码正常运行:

var context = new SqliteEfcExampleContext();
var city = new Cities {Name = "Praha"};
context.Cities.Add(city);
context.SaveChanges();

这会立即将城市添加到数据库中,这可以由外部客户端看到。

但是,以下代码不执行任何操作:

var context = new SqliteEfcExampleContext();
var city = context.Cities.Single(c => c.Name == "Praha"); // I know this is unsafe
var person = new People {Name = "Jan"};
city.People.Add(person);
context.People.Add(person);
context.SaveChanges();

更简单:

var context = new SqliteEfcExampleContext();
var person = new People { Name = "Jan" };
context.People.Add(person);
context.SaveChanges();

既不起作用。似乎外键列的存在(即使它可以为空并且未被使用)使得无法在表中插入记录。

添加

context.Entry(person).State = EntityState.Added
context.Update(person)

context.Dispose()

没有帮助。

请告诉我我做错了什么。

更新:

一旦我删除了City和People实体用于相互引用的属性(让它们作为简单的独立表工作,外键列可以为空),添加城市也已停止工作。

此外,如果我只是使用context.Cities.Add(city);添加城市(之后调用context.SaveChanges();,但这似乎在副作用中没有做任何事情)并尝试稍后使用它来获取它相同的背景 - 它不会找到它。我还尝试使用context.Local而不仅仅是context

同时,context.Database.ExecuteSqlCommand工作得很好,让我手动插入记录。

0 个答案:

没有答案