不能通过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
,以利用代码生成功能。
这应该不是必需的,我有一个类User,其主键定义如下:
[Key]
public string UserName { get; set; }
,它工作得很好…还有其他关于FooBar类的相关信息吗?
另一件事,标量属性是"映射到存储模式中单个字段的实体的属性",所以尝试使用字符串属性作为PK应该不是问题。我知道这不是一个非常有用的评论,但它似乎表明还有其他事情正在发生。