1

我正在使用 Entity Framework 4.1 我有一个“DomainEntities”表,其中包含我所有域实体的公共信息。我有一个用户表,用户 ID 是来自“DomainEntities”的外键。

见 EDMX: EDMX 文件

当我运行以下代码时,出现错误:

无法确定相关操作的有效排序。由于外键约束、模型要求或存储生成的值,可能存在依赖关系。

编码:

static void addUserTest()
{
    DomainEntity userToAdd = new DomainEntity()
    {
        EntityName = "Test User",
        EntityTypeID = DomainEntity.eEntityType.User,
        EntityCreationDate = new DateTime(),
        EntityLastUpdateDate = new DateTime(),
        EntityCreatorUserID = 0,
        EntityUpdaterUserID = 0,
        EntityParentID = null,
        UserDetails = new User()
        {
            Username = "TestUser",
            Password = "123",
            FirstName = "Test",
            LastName = "User"

        }
    };

    using (var context = new CamelotDB())
    {
        context.DomainEntities.Add(userToAdd);
        context.SaveChanges();
    }

}

我无法理解 EF 能够理解所需的 INSERT 顺序的原因是什么,它应该是“DomainEntities”中的一条记录,然后是“Users”中的一条记录。我究竟做错了什么 ?

4

2 回答 2

3

再搜索一天后,我发现问题出在 Creator 和 Updater 自引用外键上。

CreatorID 不是 Nullable,UpdaterID 也是如此,这就是为什么 EF 要求导航属性指向数据库中的实际实体,所以我在 Test User 的初始化程序中添加了以下几行。

EntityCreatorUserID = 0,
Creator = context.DomainEntities.Find(0),
EntityUpdaterUserID = 0,
Updater = context.DomainEntities.Find(0),
于 2012-12-30T05:51:10.390 回答
1

看来,与其让您User与您的 相关DomainEntity,不如让您User成为 的DomainEntity。在实体模型设计器中,这是通过使用继承工具完成的(双击工具箱中的继承工具,然后在父实体上单击一次,在子实体上单击一次。)

这更准确地描述了 a 的性质User;一个User 是一个 DomainEntity。您当前的模型表明 aUser与a相关DomainEntity,这似乎不正确。

于 2012-12-29T20:30:44.433 回答