不能通过MVC3实体模型的数据注释声明非常规的PK

本文关键字:注释 声明 非常规 PK 数据 不能 MVC3 实体模型 | 更新日期: 2023-09-27 17:50:12

我试图为实体模型声明主键,最终将由ASP消耗。. NET MVC3创建一个控制器类,因此我用[Key]属性装饰一个值:

Foobar.cs

using System.ComponentModel.DataAnnotations;
public class Foobar
{
  [Key]
  public string Foo { get; set; }
  public string Bar { get; set; }
}

FoobarDbContext.cs

using System.Data.Entity;
public class FoobarDBContext : DbContext
{
  public DbSet<Foobar> Foobars { get; set; }
}

当尝试创建前面提到的Controller时,会导致以下错误:

---------------------------
Microsoft Visual Studio
---------------------------
Unable to retrieve metadata for 'Dotnet.Samples.AspNetMvc.Models.FoobarDBContext'.
One or more validation errors were detected during model generation:
- System.Data.Edm.EdmEntityType: : EntityType 'Foobar' has no key defined.
Define the key for this EntityType.
- System.Data.Edm.EdmEntityType: : EntityType 'FoobarDBContext' has no key defined.
Define the key for this EntityType.
- System.Data.Edm.EdmEntitySet: EntityType: EntitySet __Foobars__
is based on type ?Foo? that has no keys defined.
- System.Data.Edm.EdmEntitySet: EntityType: EntitySet __FoobarDBContexts__
is based on type __FoobarDBContext__ that has no keys defined.

---------------------------
OK   
---------------------------

任何建议都将非常感谢。提前感谢,

根据实体框架中的数据注释和代码优先

KeyAttribute用于指定a属性/列是主属性的一部分适用于实体的Key只有标量属性

因此,我想我必须继续创建一个"非语义"标识符,如FoobarID,以利用代码生成功能。

不能通过MVC3实体模型的数据注释声明非常规的PK

这应该不是必需的,我有一个类User,其主键定义如下:

[Key]
public string UserName { get; set; }

,它工作得很好…还有其他关于FooBar类的相关信息吗?

另一件事,标量属性是"映射到存储模式中单个字段的实体的属性",所以尝试使用字符串属性作为PK应该不是问题。我知道这不是一个非常有用的评论,但它似乎表明还有其他事情正在发生。