使用Entity Framework 4.1与SQLITE。

4

这是可能的吗?我有一个现有的数据库,并创建了实体类:

public class MyContainer : DbContext
{
    public DbSet<Item> Items { get; set; }
    // more tables..
}

当我使用这个连接字符串时,它会失败,因为它没有任何元数据文件:

  <connectionStrings>    
  <add name="MyContainer" 
         connectionString="metadata=.\items.csdl|.\items.ssdl|.\items.msl;provider=System.Data.SQLite;provider connection string=&quot;data source=.\mindstore.sqlite.s3db&quot;" 
         providerName="System.Data.EntityClient"/>
  </connectionStrings>

但是,如果我从配置中省略元数据,它会抱怨不允许省略配置中的元数据。
那么,如何在没有任何xml配置文件的情况下使用SQLITE和EF 4.1,并只进行按约定的映射?
1个回答

1

如果你想在不使用EDMX的情况下使用EF Code First,则无法使用EntityClient。请使用适用于SQLite的常规ADO.NET连接字符串:

<connectionStrings>    
    <add name="MyContainer" providerName="System.Data.SQLite"
         connectionString="data source=.\mindstore.sqlite.s3db" />
</connectionStrings>

编辑:

要关闭数据库创建和数据库检查,请尝试删除默认元数据约定并将数据库初始化程序设置为null。

数据库初始化程序:

// call this only once in your application bootstrap
Database.SetInitializer<YourContext>(null);

移除惯例:

// Place this to your derived context
protected override void OnModelCreating(ModelBuilder modelBuilder) 
{
    base.OnModelCreationg(modelBuilder);

    modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
}

现在它告诉我“提供程序不支持DatabaseExists”。 - codymanix
现在你有一个问题,因为你的提供商不支持EF Code First使用的所有必要功能。要么检查是否有更新的提供程序版本,要么尝试关闭与数据库创建相关的所有EF功能(您将不得不自己创建数据库和表)。 - Ladislav Mrnka
数据库已经存在,所以这不是问题。我如何关闭在此失败的这些功能? - codymanix
答案应该澄清什么是“EDMX”。同时,为什么不能使用EntityClient很重要。 - whitneyland
@Lee:为什么?答案解释了当前的问题,它不应该是对实体框架的文档说明。此外,任何知道Code First和非Code First之间区别的人都知道EDMX是什么。这是你开始使用实体框架时会发现的最基本信息之一。 - Ladislav Mrnka
@Ladislav: 我可以证明你错了,因为我知道前者但不知道后者:而且任何了解Code First和非Code First区别的人都知道EDMX是什么。原因是因为我还没有在项目中使用EF,但我一直在关注ScottGu的博客上对它的进展,所以我知道Code First提供了什么。我来这里是为了在开始之前研究几个要点。从哲学上讲,我认为如果答案引入了原始问题中没有的新缩写词,应该像这样链接或用括号标注EDMX(EF XML文件格式)。 - whitneyland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接