【发布时间】:2018-05-05 16:24:45
【问题描述】:
我的实体如下:
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; }
}
我收到以下错误:
多重性在角色“Class1_Class2_Target”中无效 关系“Class1_Class2”。因为从属角色属性是 不是关键属性,多重性的上限 从属角色必须是“*”。
【问题讨论】:
-
也许您可以尝试检查您提到的成功插入的Class2的“Id”值是多少?真的是一开始就引用 Class1 吗?
-
@DriLLFreAK100 我已经尝试在 SQLite DB 中自定义插入数据。
-
如果是这种情况,可能是Class2的Id是自己的主键,而不是指向Class1的foreignKey。尝试将 Class2 的 Id 的命名更改为其他名称,例如Class1Id 试试看。
-
只要我rmb实体框架对关键字Id敏感,除非明确配置,否则会将其作为类的主键
-
@DriLLFreAK100 我已经尝试过您的建议,正如您在我更新的问题中看到的那样,但我收到了我提到的错误。
标签: c# sql entity-framework sqlite