gpt4 book ai didi

c# - 使用 ColumnAttribute 或 HasKey 方法指定复合主键的顺序

转载 作者:IT王子 更新时间:2023-10-29 04:09:41 25 4
gpt4 key购买 nike

我正在尝试对具有父子关系的 2 个对象使用复合主键。每当我尝试创建一个新的迁移时,我都会收到一个错误:

无法确定类型“Models.UserProjectRole”的复合主键顺序。使用 ColumnAttribute 或 HasKey 方法指定复合主键的顺序。

根据错误提示,我确实添加了注释 Column (Order = X) 但错误仍然存​​在并且不会消失,除非我只留下一个带有 Key 注释的字段。这是它跳闸的对象:

public class UserProjectRole
{
[Key, Column(Order = 0),DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid UserProjectRoleID { get; set; }

[Key, Column (Order = 1)]
public Guid ProjectID { get; set; }

[ForeignKey("ProjectID")]
public Project Project { get; set; }

public Guid AppUserGuid { get; set; }

// followed by a number of unrelated String fields.
}

这是项目类:

public class Project: Base
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid ProjectID { get; set; }

public virtual ICollection<UserProjectRole> UserRoles { get; set; }

// followed by a number of unrelated String fields.

}

这是我的 DBContext 的一部分:

public class SiteContext : DbContext
{

public DbSet<Project> Projects { get; set; }

public DbSet<UserProjectRole> UserProjectRoles { get; set; }
}

我在 VisualStudio 2012 中使用 EF 4.3.1

一段时间以来,我一直在反对这个问题,所有论坛和 SO 答案都建议添加我已经拥有的 Column Order 注释。我是否遗漏了一些明显的东西???

感谢您阅读到这里 -)

最佳答案

它花了很多时间摆弄和测试不同的东西。在我决定从头开始创建一个具有类似数据结构的新普通项目之前,我一无所知。当我从 NuGet 安装 EntityFramework 时,我看到了一条消息:

Known Issues with Entity Framework 4.x and .NET Framework 4.5

Entity Framework 4.1 thru 4.3 included additional data annotations in the System.ComponentModel.DataAnnotations namespace in the EntityFramework assembly. In .NET 4.5 these annotations were moved to be part of the .NET Framework in the System.ComponentModel.DataAnnotations.Schema namespace of the System.ComponentModel.DataAnnotations.dll assembly. If you are using EF 4.x and targeting .NET 4.5 this results in two data annotations with the same name in different assemblies. Because the annotations in the .NET Framework are in a different namespace we were not able to use type forwarding to avoid this conflict.

It is possible to use EF 4.x on .NET 4.5 but we recommend using the latest pre-release version of EF 5. If you are not using the affected data annotations there is no impact on your code. If you are using the data annotations in a C# project you can use the extern modifier to ensure your code uses the annotations from EntityFramework.dll (http://msdn.microsoft.com/en-us/library/e59b22c5(v=VS.80).aspx). If you use the new annotations from the System.ComponentModel.DataAnnotations.dll assembly in .NET 4.5 they will not be processed by Code First.

The affected annotations are:

  • Column
  • ComplexType
  • DatabaseGenerated
  • DatabaseGeneratedOption
  • ForeignKey
  • InverseProperty
  • MaxLength
  • MinLength
  • NotMapped
  • Table

那时我意识到我的数据项目是在 VS2012 中新创建的,默认情况下以 .Net 4.5 为目标,而我解决方案中项目的其余部分是从 VS2010 迁移并以 .Net 4.0 为目标的。因此,我已将所有项目更新为以 .Net 4.5 为目标,并获得了 EntityFramework 5.0 的预发布版本。

确保你的项目先更新到Net4.5,然后再将EF更新到5.0,否则它会永远恨你,很多兔子会死。

This screencast是更新到 EF5.0 的绝佳入门工具

<罢工>那时我的错误消失了,但我得到了不同的错误。我无法添加迁移,因为它找不到迁移配置,即使我在它之前几秒钟就设置了配置。这又花了很多时间摆弄 NuGet,卸载广告重新安装包。然后我在 packages.config 中看到这样的行:

package id="EntityFramework" version="5.0.0-rc" targetFramework="net40" 

我已将 targetFramework 更改为“net45”,现在我从迁移中获得了预期的行为。我想会有更好的方法来使用包获取 nuget 目标 .Net 4.5,但这对我有用。

我希望这能避免有人用头撞墙。

关于c# - 使用 ColumnAttribute 或 HasKey 方法指定复合主键的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11910962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com