【发布时间】:2012-02-28 14:18:33
【问题描述】:
使用 POCO 实体宽度 EF 时出现以下错误
在模型生成过程中检测到一个或多个验证错误: System.Data.Edm.EdmEntityType: : EntityType 'Brand' 没有键 定义。定义此 EntityType 的键。 System.Data.Edm.EdmEntitySet: EntityType: EntitySet 'Brand' 是基于 在没有定义键的“品牌”类型上。
POCO
public class Brand
{
//[Key]
public int BrandId { get; set; }
public String BrandName { get; set; }
public String CompanyName { get; set; }
public Int32 CountryId { get; set; }
public String Description { get; set; }
}
DBConetxt
public class DBContext : DbContext
{
public DBContext()
: base("DBContext")
{ }
public DbSet<Brand> Brand { get; set; }
public DbSet<Country> Country { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Brand>().ToTable("dbo.Brand");
modelBuilder.Entity<Country>().ToTable("dbo.Country");
base.OnModelCreating(modelBuilder);
}
}
数据库表
BrandId int
BrandName varchar
CompanyName varchar
CountryId int
Description varchar
CreatedBy int
CreatedDate datetime
ModifiedBy int
ModifiedDate datetime
用途
DBContext o = new DBContext();
return o.Brand.ToList();
如果 [Key] 注释与 POCO 一起使用来指示 pk,那么它可以正常工作,但我不想将任何依赖类与 POCO 一起使用。
有什么建议吗???
谢谢
【问题讨论】:
-
同样,Brand 具有 Country 表的 FK 属性。在使用 MVC 创建新品牌时,我需要将国家/地区列表显示为下拉列表。请建议我创建品牌实体以实现这种情况的最佳方法?
-
您使用的是哪个版本的实体框架?如果您使用的是 4.1+ (msdn.microsoft.com/en-us/library/hh161541(v=vs.103).aspx),则 BrandId 应按惯例视为您的密钥
标签: entity-framework key poco code-first