DbSet.Add() 不起作用

use*_*672 5 c# asp.net dbset

我有一堂这样的课:

[Table("member_activation")]
public partial class MemberActivation
{
    [Key]
    public Int64 member_id { get; set; }
    public String token { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的数据库:

public class SMADbContext : DbContext
{
    public SMADbContext() : base("SMADB")
    {
        Database.SetInitializer<SMADbContext>(new NullDatabaseInitializer<SMADbContext>());
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
    }

    public DbSet<Member> Members { get; set; }
    public DbSet<MemberActivation> MemberActivations { get; set; }
    public DbSet<ApiAccount> ApiAccounts { get; set; }
    public DbSet<ApiHardware> ApiHardwares { get; set; }
    public DbSet<MemberRelation> MemberRelations { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中:

    [Route("tester")]
    [AllowAnonymous]
    public IHttpActionResult tester()
    {
        using (var db = new SMADbContext())
        {
            var memberActivation = new MemberActivation();
            memberActivation.member_id = 10155;
            memberActivation.token = "hello";

            db.MemberActivations.Add(memberActivation);
            return Json(new { dbset = db.MemberActivations.ToList(), memberAct = memberActivation });

        }
    }
Run Code Online (Sandbox Code Playgroud)

db.MemberActivations.Add(memberActivation); 不起作用。当我返回 json 时,dbset 不包含新创建的 memberActivation。我没有 db.SaveChanges() 因为它不会保存,直到 memberActivation 被推送到 dbset

小智 4

你不能设置member_id,它是密钥,ef 使用它作为身份。它将被忽略。您可以配置 ef 以便 member_id 不是身份,但这是另一个主题。

 db.MembershipActivations.Add( new MemberActivation { token = "hello"}):
 db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

应该可以正常工作。

然而,如果您有一个现有成员,并且您正尝试通过连接表设置与该实体的关系,正如它所显示的那样。然后您应该检索该实体并设置成员激活。EF 将为您解决剩下的问题。这里有点猜测,因为我需要查看所涉及的实体。

  • 我想到了。必须向 member_id 属性 @RichardFrance 添加 [Required, Key, DatabaseGenerate(DatabaseGenerateOption.None)] 数据注释 (3认同)