开发将定义 .mdf 数据库的实体框架类
Posted
技术标签:
【中文标题】开发将定义 .mdf 数据库的实体框架类【英文标题】:Develop Entity Framework class that will define a .mdf database 【发布时间】:2014-07-19 05:41:09 【问题描述】:我正在尝试开发实体框架类,该类将定义一个已经创建并填充的 .mdf 数据库,然后实际创建并填充它。
错误:
在模型生成过程中检测到一个或多个验证错误:
testclass.test: : EntityType 'test' 没有定义键。定义此 EntityType 的键。 testData: EntityType: EntitySet 'testData' 基于没有定义键的类型'test'。
代码:
using System.Data.Entity;
namespace testclass
public class test
public int idt get; set;
public string datetime get; set;
public string col1 get; set;
public string col2 get; set;
public string col3 get; set;
public class TestDbContext : DbContext
public DbSet<test> testData get; set;
public class testRepository
public List<test> Gettest()
TestDbContext testDbContext = new TestDbContext();
return testDbContext.testData.ToList();
连接字符串:
<connectionStrings>
<add name="TestDbContext" connectionString="Data Source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=C:\folders\testclass\testclass\App_Data\Data.mdf;User Instance=true;" providerName="System.Data.SqlClient" />
</connectionStrings>
【问题讨论】:
【参考方案1】:您的代码存在一些问题:
主要是您的实体上缺少 主键:如果某些键的名称与某些 约定 匹配,EF 可以推断出一些键:“Id", "ID", "testId"... 所以要么使用这些标准名称之一,要么使用 [Key]
属性将您的属性显式标记为主键:
[Key]
public int idt get; set;
为确保正确清理DbContext
分配的资源,您应该将其使用情况包装在using
块中:
using (TestDbContext testDbContext = new TestDbContext())
return testDbContext.testData.ToList();
在 .Net 中,命名约定是: CamelCase 用于除局部变量和字段之外的所有内容;所以testclass
应该是Testclass
,col1
应该是Col1
,testData
应该是TestData
...
【讨论】:
以上是关于开发将定义 .mdf 数据库的实体框架类的主要内容,如果未能解决你的问题,请参考以下文章