当前位置: 首页 > 知识库问答 >
问题:

如何在没有主键实体框架的情况下映射表

楚彦
2023-03-14

我正在使用实体框架映射一些表,但除非我声明一些列作为主键,否则我无法这样做。

这里的问题是,数据库中的表没有主键,并且有数百万行。我没有创建新Id列的权限。

[Table("MYTABLE")]
public class myTable
{
    [Column("NUMX")]
    public virtual string NumX { get; set; }

    [Column("NAME")]
    public virtual string Name { get; set; }

    [Column("AGE")]
    public virtual int AGE { get; set; }
}

Obs:如果我将[键]属性添加到诸如年龄之类的列,它会工作,但返回错误的数据。

有没有办法省略主键?


共有2个答案

郁明诚
2023-03-14

我解决了这个问题。复合键适合我:例如:在我的上下文中,我定义了一些键,不仅是一个键,还有三个键:

public class MyContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        **//Here is the secret**
        modelBuilder.Entity<MyModel>().HasKey(x => new { x.NumX, x.Name,x.Age});
    }
}
南宫嘉
2023-03-14

与SQL不同,实体框架需要主键。

EF使用主键来唯一标识行(例如,当您使用时。查找()或执行更新操作)。

事实上没有主键,请记住SQLVIEW,您只能在其中读取数据。

请记住,在99%的情况下,您应该拥有主键,当您没有主键时,您应该停下来思考它是否有意义。

 类似资料:
  • 问题内容: 有谁知道如何在没有主键的情况下为表或视图进行hibernate映射? 问题答案: 不要认为Hibernate允许在没有主键的情况下映射表…考虑一下Hibernate如何在没有可以唯一标识行的列的情况下执行更新。 我猜想一种解决方法是对所有列使用复合键,但是最好添加主键。

  • TL;DR:将@webservlet(“/find-customers”)放在servlet(通过Tomcat 7部署)的开头并不是将servlet映射到host:port/webproject/find-customers中,即使servlet位于src文件夹中。

  • 我只是在练习msdn中的代码第一个新数据库实体框架,我想知道是否可以在代码第一个新数据库EF中创建没有主键的表?

  • 问题内容: 我已经制作了一个简单的Entity Framework ASP Core Application,它可以工作,但是我不知道为什么: 我做了这样的上下文: 我有两个表,像这样的模型: 有趣的是,当我运行我的应用程序时,它实际上可以拾取数据。似乎很奇怪,因为我没有指定任何表映射。我假设这只是自动映射,因为指定的表具有相同的名称。 我的问题是: 如果我不希望模型名称与数据库完全相同,该如何指

  • < sub >(我已经知道了答案,但是因为我经常发现自己在重新寻找答案,所以我把它贴在这里作为自己和他人的文档。这是Stackoverflow上鼓励的。) 许多 Servlet 开发人员都读过《Head First Serlet》一书 在Servlet 2.4及更低版本中,web.xml用于完全配置Web应用程序。但是更高版本似乎有其他方法来配置Web应用程序,无需触及web.xml和注释。例如,

  • 在Hibernate继承映射中,JPA每类表策略, 根实体不需要表来映射, 子实体做,每个子实体都有一个表。 在我的理解中,实体是:带有映射配置的java类,它应该映射到一个表, 那么,如果没有要映射的表,根实体如何作为实体存在呢? 如果它不需要一个表来映射,我们为什么不用一个@mappedSuperclass呢? 我们可以使用此根实体进行查询吗?