我正在尝试开发实体框架类,该类将定义已创建并填充的.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>
答案 0 :(得分:0)
您的代码存在一些问题:
主要是您的实体缺少主键:如果某些键的名称与某些约定相匹配,则EF可以推断出某些键:&#34; < strong> ID &#34;,&#34; ID &#34;,&#34; testId &#34; ...使用其中一个标准名称或使用[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
...