本文将分享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关键字的作用)
- .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
关键字在 EF Code First 中的属性上使用时是否有效?有人可以描述它在不同情况下的所有后果吗?
例如,我知道它可以控制延迟加载——如果您在 ICollection/一对多关系属性上使用 virtual 关键字,默认情况下它将延迟加载,而如果您不使用 virtual 关键字,它将急切地加载。
virtual
关键字在带有 POCO 实体的 EF 中还有哪些其他影响?我应该让它默认使用virtual
我的所有属性,还是默认不使用它?
答案1
小编典典到目前为止,我知道这些影响。
延迟加载:任何
virtual
ICollections 都将被延迟加载,除非您特别标记它们。更有效的变更跟踪。如果您满足以下所有要求,那么您的更改跟踪可以通过挂钩您的虚拟属性来使用更有效的方法。从链接:
要获得更改跟踪代理,基本规则是您的类必须是公开的、非抽象的或非密封的。您的类还必须为所有持久化的属性实现公共虚拟 getter/setter。最后,您必须将基于集合的关系导航属性声明为
ICollection<T>
only。它们不能是具体实现或派生自ICollection<T>
(与延迟加载代理不同)的另一个接口
.net – Entity Framework 6 with SQLite 3 Code First – 不会创建表
我的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吗?将欣赏帮助/指导,因为我现在完全卡住!
谢谢大家。
我目前正在使用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 迁移 降级 回退到空数据库
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插入时的第一个默认日期时间值
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中存储文件
这是模型:
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将列映射到二进制类型而不是图像.如何解决这个问题?
解决方法
今天关于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中存储文件等相关知识,可以在本站进行查询。
本文标签: