在C#中使用EF6: - 我有模型A,里面有模型B和C.
{"id":"b6ca6fb0-686a-4a9c-8c66-356b6db51848","requestId":"7599d94b-d3f2-48fe-80cd-e067bb1c8557","statusCode":500,"errorCode":0,"message":"An error has occurred. For more information, please check the logs for error ID b6ca6fb0-686a-4a9c-8c66-356b6db51848"}
当模型A保存在数据库中(没有B和C)时,它的工作正常。当我从数据库中获取它然后创建新的B并将其分配给A并尝试保存它。得到错误
存储更新,插入或删除语句会影响意外 行数(0)。自那以后,实体可能已被修改或删除 实体已加载。看到 http://go.microsoft.com/fwlink/?LinkId=472540了解有关的信息 理解和处理乐观并发异常。
保存不公开外键的实体时发生错误 他们关系的属性。 EntityEntries属性将 返回null,因为无法将单个实体标识为源 例外。可以在保存时处理异常 通过在实体类型中公开外键属性更容易。看到 InnerException以获取详细信息。
答案 0 :(得分:0)
首先,我会使用属性而不是字段。
然后我看到你在A
和B
以及A
和C
B
和{C
之间存在一对一的关系{1}}是可选的。
“配置一对一关系时, 实体框架要求依赖的主键也是 外键。“ - 编程实体框架代码首先由Julia Lerman& Rowan Miller
另一个问题是,在类B
中,您通过构造函数设置了Id
的值。
我会在下面尝试:
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace EFExposeForeignKey
{
public class A
{
public A()
{
Id = Guid.NewGuid();
}
[Key]
public Guid Id { get; set; }
/* Other properties of A goes here */
// Navigation property
public B B { get; set; }
// Navigation property
public C C { get; set; }
}
public class B
{
[Key]
[ForeignKey(nameof(EFExposeForeignKey.A.B))]
// Or simply [ForeignKey("B")]
// I wanted to emphasize here that "B" is NOT the type name but the name of a property in class "A"
public Guid Id { get; set; }
/* Other properties of B goes here */
// Navigation property
public A A { get; set; }
}
public class C
{
[Key]
[ForeignKey(nameof(EFExposeForeignKey.A.C))]
public Guid Id { get; set; }
/* Other properties of C goes here */
// Navigation property
public A A { get; set; }
}
}