我想用EF来存储一个包含基本列表的对象。 public class MyObject { public int Id {get;set;} public virtual IList<int> Numbers {get;set;} } 我知道EF不能存储这个,但我想知道可能的解决scheme来解决这个问题。 我能想到的两个解决scheme是: 1. 创build一个具有Id和Integervalue 的Dummy对象 ,例如 public class MyObject { public int Id {get;set;} public virtual IList<MyInt> Numbers {get;set;} } public class MyInt { public int Id {get;set;} public int Number {get;set;} } 2. 将列表值存储为blob ,例如 public class MyObject { […]
我正在尝试将TimeSpan Code First属性映射到SQL Server。 Code First似乎将其创build为SQL中的Time(7)。 但.Net中的TimeSpan可以处理比24小时更长的时间段,而且我需要存储超过24小时的事件长度。 Code First处理这个问题的最好方法是什么?
所以ADO.NETentity framework已经有了一些不好的新闻(以博客和请愿书的forms),但我不想急于判断。 我在实验的时间有限,但是我想知道有没有人使用它,但有更多的经验反馈? 最后,关于使用NHibernate的想法已经存在了很长时间, 可能比ADO.NET Entity Framework更成熟。
我正在学习关于entity framework,并有问题! 有人可以澄清,如果我认为我无法从数据库中获得父母及子女的子女,是否正确? 例如… db.Parents .Include(p => p.Children) .Where(p => p.Children.Any(c => c.Age >= 5)) 这将返回所有有5岁以上孩子的父母,但是如果我重复通过Parents.Children收集,所有的孩子将在场(不只是5岁以上)。 现在查询确实对我有意义(我已经要求包括孩子,我已经得到了他们!),但是可以想象,在某些情况下,我希望将where子句应用于子集合。 问题: 我说的是正确的吗? 是否有可能得到父母,只是从数据库的一个子集,而不需要调用数据库的负载? 我的方式离开的标志? (不会是第一次)! 我发现了一些关于这个主题的博客和SOpost,但是没有什么能够解释我的小脑袋。 编辑 读过这个博客 (感谢达斯·刘易斯)…….我还是不明白! 在博客中给出的例子中,我可以看到如何通过一个Parent实例来实现它,但是我正在努力研究如何使用集合实现它。 我怎么能得到一个IEnumerable,其中每个父母都有一个过滤收集的儿童(年龄> = 5)? 进一步澄清: 在回答唐安德鲁的评论时,我在a)一个有5岁以上孩子的父母名单(只包括那些孩子)。 任何帮助感激, 谢谢。
我在我的数据层(基于entity framework)使用DbProviderFactories和我的数据库使用SQLite,但我不必有一个App.Config具有以下代码: <configuration> <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" /> </DbProviderFactories> </system.data> </configuration> 相反,我想让我的数据层以编程方式。 任何人都知道如何做到这一点? 编辑: 原因是我正在使用一个IoC容器来select数据层,而我的一些数据层不需要App.Config值,或者让它们与数据层紧密相连。
我刚开始玩entity framework,所以我决定把它连接到我现有的SQL Server CE数据库。 我有一个IDENTITY(1,1)主键的表,但是当我试图添加一个实体,我有上述错误。 从MS Technet artice我了解到 与entity framework一起使用时,SQL Server Compact不支持具有服务器生成的键或值的实体。 使用entity framework时,实体的密钥可能被标记为服务器生成的。 这使数据库能够为插入或创build实体时的密钥生成一个值。 此外,实体的零个或多个属性可能被标记为服务器生成的值。 有关更多信息,请参阅entity framework文档中的“存储生成的模式”主题。 虽然entity framework允许您使用服务器生成的键或值来定义实体types,但SQL Server Compact不支持与entity framework一起使用服务器生成的键或值的实体。 具有服务器生成值的实体上的数据操作操作会引发“不支持”exception。 所以现在我有几个问题: 为什么你会把键标记为服务器生成的,如果不支持,会抛出一个exception? 从引用的段落中很难理解。 当我试图将StoreGeneratedPattern =“Identity”添加到我的实体的属性中时,Studio抱怨说这是不允许的。 我做错了什么? 这个限制的最佳解决方法是什么(包括切换到另一个数据库)? 我的限制是零安装和使用entity framework。
我在Visual Studio 2010 SP1和ADO.NETentity framework4.1的模板有很多问题 我注意到其他人有这些问题,并提出类似的问题,但我认为他们没有提供足够的信息来解决问题。 问题: ADO.NET实体数据模型模板没有出现 屏幕截图: http : //c0848462.cdn.cloudfiles.rackspacecloud.com/f067439f6e8f25d5fd36761fd1efc88a74fd765ff1.png 解决scheme文件 Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "localhost", "http://localhost:36626", "{9BA46BAD-E736-4943-ACAD-EDE2E7A1A21E}" ProjectSection(WebsiteProperties) = preProject UseIISExpress = "true" TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.0" Debug.AspNetCompiler.VirtualPath = "/localhost_36626" Debug.AspNetCompiler.PhysicalPath = "..\..\My Web Sites\Jantire\" Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\localhost_36626\" Debug.AspNetCompiler.Updateable = "true" Debug.AspNetCompiler.ForceOverwrite = […]
当通过Entity Framework 4.1添加logging时,是否有直接的方式来检索数据库自动生成的主键? 例如: dbcontext.Entity_Tables.Add(new Entity_Table { item1 = val1, item2 = val2 }); dbcontext.SaveChanges(); newPK = ???; SQL等价物将是: newPK = executeOnDB("INSERT INTO Entity_Table (item1, item2) VALUES (val1, val2);SELECT @@Indentity";); 顺便说一下,我正在使用MySQL,但SQL将是一样的MSSQL
我有我的核心项目在C#中。 我在一个数据库上工作,其中一些表格有“user_mod”和“date_mod”这两个字段,用于标记谁和什么时候做了一些mod,和“data_new”和“user_new”是一样的。 我的问题:是否有办法集中这一点,并使这个数据自动插入,我创builddbContext的实例? 如果没有,我将使用审计跟踪工具。 我已经看到了其中一些,但是有一个问题:所有这些都需要我的模型中的一些代码。 但是我不想写我的模型,因为如果我必须改变它,我会丢失mods。 是否可以使用EF6的审计跟踪而不写入模型文件? 怎么样? 编辑: 我尝试重写saveChanges。 public partial class PieEntities : DbContext { public override int SaveChanges(System.Data.Objects.SaveOptions options) { var timestamp = DateTime.Now; EntityState es = EntityState.Added; ObjectStateManager o = new ObjectStateManager(); foreach (ObjectStateEntry entry in o.GetObjectStateEntries(EntityState.Added )) { if (entry.Entity.GetType() == typeof(TabImpianti)) { TabImpianti impianto = entry.Entity as TabImpianti; impianto.DATA_INS […]
当在一个IQueryable上调用Max()并且有零个logging时,我得到下面的exception。 强制转换types“Int32”失败,因为物化值为空。 结果types的generics参数或查询必须使用可为空的types。 var version = ctx.Entries .Where(e => e.Competition.CompetitionId == storeCompetition.CompetitionId) .Max(e => e.Version); 现在我明白为什么发生这种情况我的问题是如果表可以是空的,最好的办法是如何做到这一点。 下面的代码工作和解决这个问题,但它的非常丑陋的是没有MaxOrDefault()概念? int? version = ctx.Entries .Where(e => e.Competition.CompetitionId == storeCompetition.CompetitionId) .Select(e => (int?)e.Version) .Max();