使用实体框架 6 创建主键

本文关键字:创建 框架 实体 | 更新日期: 2023-09-27 18:32:40

我已经检查了文档,这里有多个关于 SO 的问题,没有任何效果,但它应该。在我的班级下面

public class Player
{
    [Key]
    public int PlayerId;
    public void SetId(int id)
    {
        this.PlayerId = id;
    }
    public int GetId()
    {
        return this.PlayerId;
    }
    protected String name;
    public void SetName(String name)
    {
        this.name = name;
    }
    public String GetName()
    {
        return this.name;
    }
}

如您所见,我使用的是名称约定,我什至添加了[Key]但是当我进行迁移时,我仍然收到

玩家:

:实体类型"玩家"未定义键。定义键 此实体类型。玩家:实体类型:实体集"玩家"基于 键入未定义键的"播放器"。

这是怎么回事?为什么这不起作用?

使用实体框架 6 创建主键

你需要使用auto properties

public int PlayerId { get; set; }

你的get/set方法看起来像Java,在C#中我们通常使用内联get/set


更新:如果要使用受保护的属性,可以使用下面的代码

// protected property
protected int PlayerId { get; set; }
// protected get
public int PlayerId { protected get; set; }
// protected get
public int PlayerId { get; protected set; }

我从未见过这样的声明。对我来说看起来像java:)尝试将 PlayerId 声明为属性,而不是公共字段。

public int PlayerId { get; set; }

您不需要像 GetId 和 SetId 这样的方法。

如果要使用具有访问说明符的属性作为受保护或私有,则需要在配置类中告知:

public class Player
{
    public int PlayerId { get; set; }
    protected string Name { get; set; }
    public class PlayerConfiguration : EntityTypeConfiguration<Player>
    {
        public PlayerConfiguration()
        {
            Property(b => b.Name);
        }
    }
}