首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >实体框架:没有主键的表

实体框架:没有主键的表
EN

Stack Overflow用户
提问于 2010-10-22 20:32:44
回答 12查看 197.4K关注 0票数 175

我有一个现有的数据库,我想用它来构建一个使用EF4.0的新应用程序

有些表没有定义主键,因此当我创建一个新的实体数据模型时,我会得到以下消息:

代码语言:javascript
复制
The table/view TABLE_NAME does not have a primary key defined 
and no valid primary key could be inferred. This table/view has 
been excluded. To use the entity, you will need to review your schema, 
add the correct keys, and uncomment it.

如果我想使用它们并修改数据,我是否必须向这些表添加PK,或者是否有解决方法使我不必这样做?

EN

回答 12

Stack Overflow用户

发布于 2011-10-05 06:05:20

我认为这是由Tillito解决的:

Entity Framework and SQL Server View

我将在下面引用他的条目:

我们有同样的问题,下面是解决方案:

若要强制实体框架将列用作主键,请使用ISNULL。

若要强制实体框架不将列用作主键,请使用NULLIF。

应用它的一种简单方法是将视图的select语句包装在另一个select语句中。

示例:

代码语言:javascript
复制
SELECT
  ISNULL(MyPrimaryID,-999) MyPrimaryID,
  NULLIF(AnotherProperty,'') AnotherProperty
  FROM ( ... ) AS temp

10年4月26日17:00由Tillito回答

票数 105
EN

Stack Overflow用户

发布于 2016-11-18 22:42:01

组合键也可以使用Entity Framework Fluent API来完成

代码语言:javascript
复制
public class MyModelConfiguration : EntityTypeConfiguration<MyModel>
{
     public MyModelConfiguration()
     {
        ToTable("MY_MODEL_TABLE");
        HasKey(x => new { x.SourceId, x.StartDate, x.EndDate, x.GmsDate });
        ...
     }
}
票数 19
EN

Stack Overflow用户

发布于 2014-02-11 09:18:47

在我的例子中,我必须将一个实体映射到一个没有主键的View。此外,我不被允许修改这个视图。幸运的是,这个视图有一个唯一的字符串列。我的解决方案是将此列标记为主键:

代码语言:javascript
复制
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[StringLength(255)]
public string UserSID { get; set; }

作弊的EF。工作得很好,没人注意到...:)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3996782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档