GVKun编程网logo

virtual 关键字在 Entity Framework 4.1 POCO Code First 中可以产生什么影响?(virtual关键字的作用)

7

本文将分享virtual关键字在EntityFramework4.1POCOCodeFirst中可以产生什么影响?的详细内容,并且还将对virtual关键字的作用进行详尽解释,此外,我们还将为大家带来

本文将分享virtual 关键字在 Entity Framework 4.1 POCO Code First 中可以产生什么影响?的详细内容,并且还将对virtual关键字的作用进行详尽解释,此外,我们还将为大家带来关于.net – Entity Framework 6 with SQLite 3 Code First – 不会创建表、C# EntityFramework Code First 迁移 降级 回退到空数据库、c# – Entity Framework 6 Code First插入时的第一个默认日期时间值、c# – 使用Entity Framework Code-First方法在SQL CE 4中存储文件的相关知识,希望对你有所帮助。

本文目录一览:

virtual 关键字在 Entity Framework 4.1 POCO Code First 中可以产生什么影响?(virtual关键字的作用)

virtual 关键字在 Entity Framework 4.1 POCO Code First 中可以产生什么影响?(virtual关键字的作用)

virtual关键字在 EF Code First 中的属性上使用时是否有效?有人可以描述它在不同情况下的所有后果吗?

例如,我知道它可以控制延迟加载——如果您在 ICollection/一对多关系属性上使用 virtual 关键字,默认情况下它将延迟加载,而如果您不使用 virtual 关键字,它将急切地加载。

virtual关键字在带有 POCO 实体的 EF 中还有哪些其他影响?我应该让它默认使用virtual我的所有属性,还是默认不使用它?

答案1

小编典典

到目前为止,我知道这些影响。

  • 延迟加载:任何virtualICollections 都将被延迟加载,除非您特别标记它们。

  • 更有效的变更跟踪。如果您满足以下所有要求,那么您的更改跟踪可以通过挂钩您的虚拟属性来使用更有效的方法。从链接:

要获得更改跟踪代理,基本规则是您的类必须是公开的、非抽象的或非密封的。您的类还必须为所有持久化的属性实现公共虚拟 getter/setter。最后,您必须将基于集合的关系导航属性声明为ICollection<T>only。它们不能是具体实现或派生自ICollection<T>(与延迟加载代理不同)的另一个接口

.net – Entity Framework 6 with SQLite 3 Code First – 不会创建表

.net – Entity Framework 6 with SQLite 3 Code First – 不会创建表

使用NuGet的最新版本的EF6和sqlite。我终于得到了app.config文件工作后一些有用的帖子Stackoverflow。现在的问题是,虽然数据库是不创建表。

我的app.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration,visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection,EntityFramework,Version=6.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <entityFramework>
    <providers>
      <provider invariantName="System.Data.sqlite"
                type="System.Data.sqlite.EF6.sqliteProviderServices,System.Data.sqlite.EF6" />
    </providers>
  </entityFramework>
  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.sqlite" />
      <add name="sqlite Data Provider"
           invariant="System.Data.sqlite"
           description=".Net Framework Data Provider for sqlite"
           type="System.Data.sqlite.sqliteFactory,System.Data.sqlite" />
      <remove invariant="System.Data.sqlite.EF6" />
      <add name="sqlite Data Provider (Entity Framework 6)"
           invariant="System.Data.sqlite.EF6"
           description=".Net Framework Data Provider for sqlite (Entity Framework 6)"
           type="System.Data.sqlite.EF6.sqliteProviderFactory,System.Data.sqlite.EF6" />
    </DbProviderFactories>
  </system.data>
  <connectionStrings>
    <add name="MyDBContext"
          connectionString="Data Source=|DataDirectory|MyDB.sqlite"
          providerName="System.Data.sqlite" />
  </connectionStrings>
</configuration>

我的简单测试程序:

class Program
{
    static void Main(string[] args)
    {
        using (var db = new MyDBContext())
        {
            db.Notes.Add(new Note { Text = "Hello,world" });
            db.Notes.Add(new Note { Text = "A second note" });
            db.Notes.Add(new Note { Text = "F Sharp" });
            db.SaveChanges();
        }

        using (var db = new MyDBContext())
        {
            foreach (var note in db.Notes)
            {
                Console.WriteLine("Note {0} = {1}",note.NoteId,note.Text);
            }
        }

        Console.Write("Press any key . . . ");
        Console.ReadKey();
    }

    public class Note
    {
        public long NoteId { get; set; }
        public string Text { get; set; }
    }

    public class MyDBContext : DbContext
    {
        // default constructor should do this automatically but fails in this case
        public MyDBContext()
            : base("MyDBContext")
        {

        }
        public DbSet<Note> Notes { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }
    }
}

如果我手动创建表的程序工作正常,表更新。如果我删除数据库,EF将创建它,但不创建表,并且程序尝试读回带有该表不存在的错误消息的数据时失败。

有人设法让Code First使用EF6吗?将欣赏帮助/指导,因为我现在完全卡住!

谢谢大家。

不幸的是,System.Data.sqlite.EF6中的EF6提供程序实现不支持创建表。我下载了sqlite源代码看看,但是找不到任何创建表和迁移的东西。 EF6提供程序基本上与它们的Linq实现相同,所以它的目的都是查询数据库而不是修改它。

我目前正在使用sql Server的所有工作,并使用SQL Server Compact & SQLite Toolbox为sqlite生成sql脚本。然后可以使用sqliteCommand运行脚本来模拟迁移。

更新

在EF7年,对sql服务器压缩的支持被放弃,并且EF团队正在开发sqlite的新提供程序。提供程序将使用Microsoft的受管sqlite包装程序项目,Microsoft.Data.SQLite而不是System.Data.sqlite项目。这也将允许在iOS,Android,Windows Phone / Mobile,Linux,Mac等上使用EF7,因为Microsoft的包装程序正在开发为便携式库。

它仍然处于测试阶段,但是如果你想看看,你可以从MyGet(dev,master,release)的ASP.Net开发源获取nuget包。查找EntityFramework.sqlite包。

C# EntityFramework Code First 迁移 降级 回退到空数据库

C# EntityFramework Code First 迁移 降级 回退到空数据库

C# EntityFramework  Code First 迁移 降级 回退到空数据库

1、包管理器控制台-迁移

在包管理器控制台中运行

Enable-Migrations

Add-Migration  注意执行该命令时 需要在Name之后添加名称   如 Name: 123,这个名字是一个标记,用于迁移和降级时使用的

Update-Database   

 

2、包管理器控制台-降级迁移

–TargetMigration 切换为降级到此迁移

如果想要一直回退到空数据库,可使用 Update-Database –TargetMigration:迁移名称(即在Add-Migration 时紧跟后面添加的  Name )  命令

Update-Database –TargetMigration:迁移名称(即在Add-Migration 时紧跟后面添加的  Name ) 

Update-Database –TargetMigration:迁移名称 命令将为最新的Migration迁移运行 Down 方法。

降级到此迁移在包管理器控制台中运行以下命令

Update-Database –TargetMigration:迁移名称 


3、包管理器控制台-降级迁移回退到空数据库

如果想要一直回退到空数据库,可使用 Update-Database –TargetMigration: $InitialDatabase 命令。

回退到空数据库在包管理器控制台中运行以下命令

Update-Database –TargetMigration: $InitialDatabase

 

c# – Entity Framework 6 Code First插入时的第一个默认日期时间值

c# – Entity Framework 6 Code First插入时的第一个默认日期时间值

当我保存对数据库的更改时,我遇到了以下异常:
Cannot insert the value NULL into column 'Registered',table
'EIT.Enterprise.KMS.dbo.LicenseEntry'; column does not allow nulls.
INSERT fails. The statement has been terminated.

相关代码第一个模型属性如下所示:

[DatabaseGenerated(DatabaseGeneratedOption.Identity),DataMember]
public DateTime         Registered          { get; private set; }

……这就是为什么我感到困惑:据我所知,通过提供注释[DatabaseGenerated(DatabaseGeneratedOption.Identity)我命令实体框架自动生成字段(在这种情况下:在创建时只有一次) .)

所以我期望有一个不可为空(必需)的字段,没有可能在EF处理的情况下手动改变字段.

我究竟做错了什么?

笔记:

>我不想使用Fluent-API,因为我想使用POCO.
>属性defaultValuesql也不是一个选项,因为我需要依赖该项目的数据库(例如GETDATE()).
>我正在使用Entity Framework 6 alpha 3,Code First.

解决方法

试试这个:
[DatabaseGenerated(DatabaseGeneratedOption.Identity),DataMember]
public DateTime?            Registered          { get; private set; }

问号使该属性可以为空

c# – 使用Entity Framework Code-First方法在SQL CE 4中存储文件

c# – 使用Entity Framework Code-First方法在SQL CE 4中存储文件

我正在尝试将实体添加到sql CE 4,它具有byte []类型的属性.从msdn我发现只有图像类型可以容纳大文件(在我的情况下,它们不是那么大,但仍然超过二进制类型8000字节的限制).
这是模型:
public class TabModel
{
    [Key]
    public Guid Id { get; set; }

    public string Title { get; set; }
    public string Subtitle { get; set; }
    public string Artist { get; set; }
    public string Album { get; set; }
    public string Author { get; set; }
    public string TabAuthor { get; set; }
    public DateTime DateAdded { get; set; }

    [Column("file",TypeName="image")]
    public byte[] File { get; set; }

    public TabModel()
    {
        Id = Guid.NewGuid();
        DateAdded = DateTime.Now;
    }
}

我也有从DbContext派生的类,当我使用它时这样的东西

library.Tabs.Add(tab);//tab of type TabModel,File is array with length equals 12000
library.SaveChanges();//throws exception

错误:

Validation Failed for one or more entities. See
‘EntityValidationErrors’ property for more details.
EntityValidationErrors[0]=”The field File must be a string or array
type with a maximum length of ‘4000’.”

我试图在属性上使用MaxLength属性,并将错误更改为“不支持长度超过8000的二进制clumn”.

似乎EF将列映射到二进制类型而不是图像.如何解决这个问题?

解决方法

请参阅此博客文章: http://erikej.blogspot.com/2011/04/saving-images-to-sql-server-compact.html – 您需要禁用验证作为解决方法.

今天关于virtual 关键字在 Entity Framework 4.1 POCO Code First 中可以产生什么影响?virtual关键字的作用的分享就到这里,希望大家有所收获,若想了解更多关于.net – Entity Framework 6 with SQLite 3 Code First – 不会创建表、C# EntityFramework Code First 迁移 降级 回退到空数据库、c# – Entity Framework 6 Code First插入时的第一个默认日期时间值、c# – 使用Entity Framework Code-First方法在SQL CE 4中存储文件等相关知识,可以在本站进行查询。

本文标签: