0

目前,我一直在使用位于服务外观下的 Entity Framework 1.0。

以下是我创建的用于更新或插入相关设备的保存方法之一。

这目前有效,但是,我不禁觉得它有点黑客必须将引用的属性设置为 null 然后重新附加它们只是为了让插入工作。changedDevice 已经保存了这些值,为什么我需要再次分配它们。

所以,我想我会将模型更新为 EF4。这样我就可以直接访问外键。但是,在这样做时,我发现似乎没有一种简单的方法来添加外键,除非从图中删除实体并重新添加它。我不想这样做,因为我已经完成了从数据库列名重命名它们的所有实体属性。任何人都可以帮忙吗?

 /// <summary>
    /// Saves the non network device.
    /// </summary>
    /// <param name="nonNetworkDeviceDto">The non network device dto.</param>
    public void SaveNonNetworkDevice(NonNetworkDeviceDto nonNetworkDeviceDto)
    {
        using (var context = new AssetNetworkEntities2())
        {
            var changedDevice = TransformationHelper.ConvertNonNetworkDeviceDtoToEntity(nonNetworkDeviceDto);
            if (!nonNetworkDeviceDto.DeviceId.Equals(-1))
            {
                var originalDevice =
                context.NonNetworkDevices.Include("Status").Include("NonNetworkType").FirstOrDefault(
                  d => d.DeviceId.Equals(nonNetworkDeviceDto.DeviceId));
                context.ApplyAllReferencedPropertyChanges(originalDevice, changedDevice);
                context.ApplyCurrentValues(originalDevice.EntityKey.EntitySetName, changedDevice);
            }
            else
            {
                var maxNetworkDevice = context.NonNetworkDevices.OrderBy("it.DeviceId DESC").First();
                changedDevice.DeviceId = maxNetworkDevice.DeviceId + 1;
                var status = changedDevice.Status;
                var nonNetworkType = changedDevice.NonNetworkType;
                changedDevice.Status = null;
                changedDevice.NonNetworkType = null;
                context.AttachTo("DeviceStatuses", status);
                if (nonNetworkType != null)
                {
                    context.AttachTo("NonNetworkTypes", nonNetworkType);
                }

                changedDevice.Status = status;
                changedDevice.NonNetworkType = nonNetworkType;
                context.AddToNonNetworkDevices(changedDevice);
            }

            context.SaveChanges();
        }
    }
4

2 回答 2

1

然后,您将需要在 XML 编辑器中编辑 EDMX 文件。也许会自动更新一个表,区分 EDMX 文件以查看发生了什么变化,然后进入并编辑所有其他表。

如果您使用的是数据库优先的方法,那么重命名所有字段名称是一个大胆但有风险的举动。如果您有这种灵活性,将数据库中的字段重命名为更好的名称会更好。

您将遇到的另一个问题是 EF4 将希望您的实体名称复数,除非您要求它不要这样做。如果您确实将模型从 EF1 更新到 EF4 并使其名称复数,请记住检查任何弱类型的 Include() 调用,并在修复它们时将它们更改为众多强类型的 .Include() 之一,您将在网上找到。

于 2010-04-28T06:13:31.337 回答
0

我遇到了同样的问题,这就是我最终修复模型的方式。

你应该能够重建你们的关系。如果您将其设置为多对一关系,您将获得启用添加外键属性的复选框,您可以选中它以创建将属性添加到您的实体。不要忘记修改名称。

您还可以通过双击图表中的线来访问关系详细信息。

请注意,创建的属性需要映射到数据库中的 FK 字段。

于 2010-05-22T06:33:21.797 回答