Tag: entity framework 5

如何获取Entity Framework 5中的已修改对象列表

我将entities列表绑定到数据网格视图,如下所示: var orders = context.Order.ToList(); BindingList orderList = new BindingList(orders); dataGridView1.DataSource = orderList; 用户可以直接在datagridview上编辑或添加新内容。 当用户单击“ Save按钮时,为了优化性能,我想检索已更改/新的实体列表以执行插入/更新。 我怎样才能做到这一点? 编辑定义向gridview添加新行: BindinList orders = (BindingList)dataGridView1.Datasource; order.Add(new Order()); 编辑2解决: BindinList orders = (BindingList)dataGridView1.Datasource; Order order = new Order(); context.Order.Add(order); order.Add(order);

关系处于已删除状态

当我试图清除一个集合(调用.Clear )时,我得到以下exception: 保存不公开其关系的外键属性的实体时发生错误。 EntityEntries属性将返回null,因为无法将单个实体标识为exception的来源。 通过在实体类型中公开外键属性,可以更轻松地在保存时处理exception。 有关详细信息,请参阅InnerException。 内在的例外是: 来自’User_Availability’AssociationSet的关系处于’已删除’状态。 给定多重约束,相应的’User_Availability_Target’也必须处于’已删除’状态。 用户看起来像这样: …. ICollection Availability { get; set; } 可用性如下所示: int ID { get; set; } User User { get; set; } DateTime Start { get; set; DateTime End { get; set; } 配置如下: HasMany(x => x.Availability).WithRequired(x => x.User); HasRequired(x => x.User).WithMany(x => x.Availability); 导致问题的代码是: user.Availability.Clear(); 我已经看过其他替代方法,例如使用DbSet删除项目,但我觉得我的代码不会那么干净。 […]

entity framework5 MaxLength

我使用EF4和我发现的一段代码从这样的实体获取MaxLength值: public static int? GetMaxLength(string entityTypeName, string columnName) { int? result = null; using (fooEntities context = new fooEntities()) { Type entType = Type.GetType(entityTypeName); var q = from meta in context.MetadataWorkspace.GetItems(DataSpace.CSpace) .Where(m => m.BuiltInTypeKind == BuiltInTypeKind.EntityType) from p in (meta as EntityType).Properties .Where(p => p.Name == columnName && p.TypeUsage.EdmType.Name == “String”) select p; var queryResult […]

如何使用Model First方法使用动态连接字符串,但仍然使用EDMX中的数据模型?

我使用EF 5使用Model First方法创建了一个EDMX,即我从一个空白设计师开始并模拟我的实体。 现在,我希望能够使用EDMX中定义的此模型,但提供运行时SQL Server连接字符串,而无需修改配置文件。 我知道如何将连接字符串传递给DbContext但问题是找到程序集中映射的元数据。 例如,我的EDMX在app.config中有这个连接字符串 我缺少的部分是”metadata=res://*/Data.DataContext.EntityFramework.MesSystem.csdl|res://*/Data.DataContext.EntityFramework.MesSystem.ssdl|res://*/Data.DataContext.EntityFramework.MesSystem.msl;” 我希望能够以编程方式创建一个DbContext传入SQL Server连接字符串,但“添加”元数据部分。 这就是我希望T4文件生成的内容…… public partial class MesSystemEntities : DbContext { public MesSystemEntities() : base(“name=MesSystemEntities”) { } public MesSystemEntities(string sqlServerConnectionString) : base(GetEfConnectionString(sqlServerConnectionString)) { } private string GetEfConnectionString(string sqlServerConnectionString) { // values added by T4 generation string format = “metadata=res://*/Data.DataContext.EntityFramework.MesSystem.csdl|res://*/Data.DataContext.EntityFramework.MesSystem.ssdl|res://*/Data.DataContext.EntityFramework.MesSystem.msl;;provider=System.Data.SqlClient;provider connection string=\”{0}\””; return String.Format(format, sqlServerConnectionString); } … } 我的问题是如何在T4生成文件中获取我需要的元数据来创建entity […]

代码首先创建表

我正在学习本教程,并尝试在userprofile表中添加一些新列。 我试图创建一个新表。 public class UsersContext : DbContext { public UsersContext() : base(“DefaultConnection”) { } public DbSet UserProfiles { get; set; } public DbSet TestTabel { get; set; } } [Table(“UserProfile”)] public class UserProfile { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int UserId { get; set; } public string UserName { get; set; } public string Mobile { get; […]

如何使用Entity Framework DB First的现有枚举

我首先使用Entity Framework 5,DB。 我知道如何在我的模型上定义枚举,并将字段的类型设置为该枚举。 现在,我需要将字段MyField映射到外部定义的枚举,即不在EF模型( OtherNamespace.MyEnum )中。 设计者不允许我将类型设置为模型之外的任何类型。 我尝试手动编辑edmx文件,但这会导致错误: 错误10016:解析项目’MyField’时出错。 exception消息是:’Unresolved reference’Othercomspace.MyEnum’。’。 我的项目引用了OtherNamespace.MyEnum 。 你怎么做呢?

entity framework5代码优先不创建数据库

我正在尝试使用Entity Framework的代码优先概念创建一个新数据库。 但是,在运行代码时,不会创建数据库(使用DropCreateDatabaseIfModelChanges设置),尽管代码运行正常。 当我尝试从数据库中获取内容时,我看到以下exception。 我的项目使用单独的DataAccess层进行设置,该层具有通用服务和存储库构造。 因此,我的所有实体,存储库和数据库上下文都在解决方案中的单独项目中。 我的global.asax文件包含以下代码。 Database.SetInitializer(new DropCreateDatabaseIfModelChanges()); 这应该初始化一个新的数据库,如果它不存在,对吧? 我的数据库上下文类看起来像这样; namespace Website.DAL.Model { public class MyContext : DbContext { public IDbSet Projects { get; set; } public IDbSet Portfolios { get; set; } /// /// The constructor, we provide the connectionstring to be used to it’s base class. /// public MyContext() : base(“MyConnectionString”) { […]

用户具有系统角色 – 如何(对象)模型三元关系?

我有以下实体: Privilege ( Id, Name ) Role ( Id, Name, ICollection ) System ( Id, Name ) User ( Id, Name, Pass, ? ) 现在我想建模“一个用户可能拥有零个或多个系统中的每一个零个或多个角色”,例如: IDictionary<System, ICollection> SystemRoles { get; set; } 这是否可以使用ASP.NET EntityFramework? 如果有,怎么样? 我必须设置什么属性? 一直在寻找相当长的一段时间,但是我没有在网上找到任何有用的“entity framework代码第一个三元关系” 你能指点我一些很好的链接吗? 或者也许给我一个提示如何建模/我可以把哪些属性放在字典上? 其他问题:如果IDictionary解决方案以某种方式工作,是否有任何更改以获得更改跟踪代理性能? IDictionary不是ICollection …

如何获取EF 5中所有实体的列表?

我正在构建一个MVC 4应用程序。 我有一个下拉列表,需要显示所有使用的表(实体).. 我怎样才能做到这一点? 我首先使用EF 5代码配置。 任何帮助,将不胜感激。 谢谢

C#如何序列化system.linq.expressions?

我正在研究winRT和entity framework(到SQL),它们之间进行通信的层是WCF服务。 在entity framework中,我使用的是Repository Pattern,我有方法: public IQueryable GetBySearch(Expression<Func> search) { return this.Context.Users.Where(search); } 一切正常,但是当我把它添加到WCF [OperationContract] IQueryable GetUserBySearch(Expression<Func> search); 和: public IQueryable GetUserBySearch(Expression<Func> search) { IUser user = new UserRepository(); return user.GetBySearch(search); } 但是Expression不能序列化的问题,因此,WCF无法序列化它。 所以我想inheritance它并使其成为[Serializable]但问题是它是一个密封的类。 有人可以帮我解决问题吗?