我的实体如下:
public class Class1
{
public int Id { get; set; }
[StringLength(50)]
public string Name { get; set; }
public virtual Class2 Class2{ get; set; }
}
public class Class2
{
[ForeignKey("Class1")]
public int Id { get; set; }
public int? Price { get; set; }
public virtual Class1 Class1{ get; set; }
}
我需要SQLite-Code-First中这两个实体之间的一对一关系。所以我使用了以下代码:
modelBuilder.Entity<Class1>()
.HasOptional(s => s.Class2)
.WithRequired(c => c.Class1);
但不幸的是,这似乎并不奏效。我不应该在Class2
表格中插入一个ID,如果它已经在Class1
中没有插入,我可以。有人能帮帮我吗?
如果我将Class2's Id
的命名更改为其他内容,例如Class1Id
喜欢这样:
public class Class2
{
public int Id { get; set; }
[ForeignKey("Class1")]
public int Class1Id { get; set; }
public int? X { get; set; }
public int? Y { get; set; }
public virtual Entity Entity { get; set; }
}
我收到以下错误:
多重性在角色&#39; Class1_Class2_Target&#39;中无效。在 关系&#39; Class1_Class2&#39;。因为依赖角色属性是 不是关键属性,多重性的上限 依赖角色必须是&#39; *&#39;。
答案 0 :(得分:1)
您的SQL是Sqlite。
默认情况下,尽管您使用的是EF,但Sqlite并不支持外键。
您应该明确启用支持外键。
PRAGMA foreign_keys = ON;
您可以像执行任何其他SQL语句一样执行此操作。注意:您应该为每个新连接执行 。只需更改连接字符串
即可data source = C:\ Dbs \ myDb.db; foreign keys = true; (用你的sqlite数据库替换C:\ Dbs \ myDb.db。)
我更喜欢方法2)