无法跟踪 .Net 核心中的类型实例?

Jam*_*123 2 c# entity-framework entity-framework-core .net-core

对于其中一张表,我遇到了以下错误。该表没有主键。如何处理?我正在尝试向表中添加新行。

错误

Unable to track an instance of type 'CommonDataZipInfo' because it does not have a primary key. 
Only entity types with primary keys may be tracked.'
Run Code Online (Sandbox Code Playgroud)

数据上下文.cs

modelBuilder.Entity<CommonDataZipInfo>(entity =>
        {
            entity.HasNoKey();

            entity.ToTable("COMMON_DATA_ZIP_INFO");

            entity.Property(e => e.AddDate).HasColumnType("datetime");

            entity.Property(e => e.ManuscriptNum)
                .HasColumnName("manuscript_num")
                .HasMaxLength(32)
                .IsUnicode(false);

            entity.Property(e => e.ZipfileName)
                .HasMaxLength(32)
                .IsUnicode(false);
        });
Run Code Online (Sandbox Code Playgroud)

程序.cs

 var CommonDataZipInfo = new CommonDataZipInfo()
 {
      ManuscriptNum = ManuscriptNum,
      ZipfileName = Path.GetFileName(fileName),
      AddDate = DateTime.Now
  };
  context.CommonDataZipInfo.Add(CommonDataZipInfo);
  context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

小智 5

我在这里遇到了同样的问题。这些是我的代码:

[...]

public partial class Radusergroup
{

        public string Username { get; set; }
        public string Groupname { get; set; }
        public int Priority { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

[...]

[...]

modelBuilder.Entity<Radusergroup>(entity =>
{

                entity.HasNoKey();

                entity.ToTable("radusergroup");

                entity.HasIndex(e => e.Username)
                    .HasName("username");

                entity.Property(e => e.Groupname)
                    .IsRequired()
                    .HasColumnName("groupname")
                    .HasMaxLength(64)
                    .HasDefaultValueSql("''''''");

                entity.Property(e => e.Priority)
                    .HasColumnName("priority")
                    .HasColumnType("int(11)")
                    .HasDefaultValueSql("'1'");

                entity.Property(e => e.Username)
                    .IsRequired()
                    .HasColumnName("username")
                    .HasMaxLength(64)
                    .HasDefaultValueSql("''''''");
});
Run Code Online (Sandbox Code Playgroud)

[...]

由于您没有为表创建键,有时由于某种原因您无法更改数据库。就我而言,这是另一个应用程序使用的数据库,所以我不想破坏其他应用程序,所以我的解决方案只是将我的属性“用户名”转换为一个键,如下所示:

public partial class Radusergroup
{
   [Key]
   public string Username { get; set; }
   public string Groupname { get; set; }
   public int Priority { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并删除上下文中的 HasNoKey:

[...]

modelBuilder.Entity<Radusergroup>(entity =>
{

                //entity.HasNoKey();

                entity.ToTable("radusergroup");

                entity.HasIndex(e => e.Username)
                    .HasName("username");

                entity.Property(e => e.Groupname)
                    .IsRequired()
                    .HasColumnName("groupname")
                    .HasMaxLength(64)
                    .HasDefaultValueSql("''''''");

                entity.Property(e => e.Priority)
                    .HasColumnName("priority")
                    .HasColumnType("int(11)")
                    .HasDefaultValueSql("'1'");

                entity.Property(e => e.Username)
                    .IsRequired()
                    .HasColumnName("username")
                    .HasMaxLength(64)
                    .HasDefaultValueSql("''''''");
});
Run Code Online (Sandbox Code Playgroud)

[...]

这可能会解决它。


cde*_*dev 2

EF实体必须需要一个主键才能操作,并且该键可以存在于表中,也可以不存在。

根据我的经验(这是一种解决方法),我试图使用几列找到一个唯一的键并在模型中定义它。也许您可以使用无键实体类型