【发布时间】:2015-06-25 14:57:32
【问题描述】:
我从 C# 开始,我想制作自己的数据库。
我有两个模型
public class AModel
{
public Guid ID { get; private set; }
public string Name { get; set; }
public int Count { get; set; }
public AModel()
{
this.ID = Guid.NewGuid();
}
}
public class BModel
{
public Guid ID { get; private set; }
public string Name { get; set; }
public AModel Model { get; set; }
public BModel()
{
this.ID = Guid.NewGuid();
}
}
当我尝试将 BModel 保存到 DB 时,我收到此错误:
违反主键约束“PK_dbo.AModels”。无法插入 对象“dbo.AModels”中的重复键。重复键值为 (48ee1711-8da4-46c1-a714-19e985211fed)。\r\n语句已 终止。
我以为这样就解决了
modelBuilder.Entity<BModel>().HasRequired(t => t.Model).WithMany();
但看起来我完全迷路了。有人可以帮我做这个简单的例子吗?
【问题讨论】:
-
错误消息很隐秘,因为在天文数字上不太可能出现带有 Guid 的重复密钥。然而,我怀疑的是,由于映射不正确,它试图创建多个相同的外键。如果你使用
modelBuilder.Entity<BModel>().HasRequired(t => t.Model).WithMany().Map(x => { x.ToTable("BAs"); x.MapLeftKey("BId"); x.MapRightKey("AId"); });会发生什么? -
在创建 BModel 时我没有创建新的 AModel 实例,而是从 Combobox 中选择一个已经创建的 AModel 实例。我只是希望它创建从 BModel 到 AModel 的引用。
-
这将如何工作?每次创建新模型时,您都会创建一个新的 GUID。并且有一个私人套装。当它从数据中获取模式时,它将如何为 ID 赋值?
标签: c# entity-framework ef-fluent-api