开发将定义 .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 应该是Testclasscol1 应该是Col1testData 应该是TestData...

【讨论】:

以上是关于开发将定义 .mdf 数据库的实体框架类的主要内容,如果未能解决你的问题,请参考以下文章

从实体框架映射到自定义域模型类?

实体框架运行转换代码时引发异常

将关系映射到实体框架中的抽象集合

实体框架代码首先自定义字段,我不想映射到数据库

将实体框架从数据库优先转换为代码优先

Java的SpringMVC框架操作数据库,一定要建立对应的实体类吗,能不能通过直接嵌入sql命令方式操作数据库?