Tag: entity framework

如何在Entity Framework 5中表达“有很多通过”的关系?

我试图使用Entity Framework 5来查询现有的MySQL数据库。 我使用代码优先创建一个基于代码的模型,该模型按照MSDN上的本教程映射到现有数据库。 我有两个表: users和buddies 。 User有id , name和email 。 Buddy有一个user_id和一个buddy_id 。 User有很多Buddies (也是Users )。 buddy_id列是返回Users表的外键。 所以每个User都有很多Users通过Buddies 。 public class User { public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public IList Buddies { get; set; } } 这是我的数据库访问代码: using (var […]

如何确定数据库中哪些字段指定为NOT NULL?

我的解决方案中有一个数据库优先,代码生成的EF数据项目。 我需要做的是确定我的模型中的哪些字段在数据库中被定义为NOT NULL (即必需)。 这对于值类型(整数,浮点数,小数等)并不困难,因为如果DB允许空值,则它们被EF代码生成器定义为可空类型。 但是,当字段是引用类型时,我无法弄清楚如何确定字段是否在数据库中定义为NULL / NOT NULL 。 这似乎是一个显而易见的问题,但我无法通过Google或其他方式找到解决方案。 使用EF模型时,如何在保存操作成功之前查询模型中是否需要填充哪些字段? 一种不同的方法 重新访问这个问题后,我想我会做一些进一步的研究。 首先,通过Visual Studio添加实体,在单步执行EF向导后,生成了一个.edmx文件。 我之前已多次访问此文件,并且我已更新并将表添加到此文件中。 今天,我决定在设计师中打开它并查看我的一些领域的一些属性。 果然,我的nvarchar NOT NULL字段上有一个名为Nullable的属性。 那么,我如何使用EF并获得Nullable属性设置为false的实体上的字段列表?

忽略entity framework代码中的基类型也会忽略子类吗?

我正在尝试模拟一个场景,在这个场景中,我从第三方库中的具体基类inheritance,然后使用Entity Framework Code First映射我自己的类。 我更希望我的类具有与基类相同的简单名称。 我显然不能更改基类的类名,也不能将基类更改为抽象。 正如所料,我收到以下错误: 类型’EfInheritanceTest.Models.Order’和类型’EfInheritanceTest.Models.Base.Order’都具有相同的简单名称’Order’,因此不能在同一模型中使用。 给定模型中的所有类型都必须具有唯一的简单名称。 使用“NotMappedAttribute”或在Code First Fluent API中调用Ignore,以从模型中明确排除属性或类型。 据我所知,在EF6中,只要实际映射了其中一个类,就可以实现。 但是,如果我尝试使用流畅的API忽略基类,我会收到以下错误: 未映射“EfInheritanceTest.Models.Order”类型。 使用Ignore方法或NotMappedAttribute数据批注检查未明确排除类型。 validation类型是否已定义为类,不是原始类型还是通用类型,并且不从EntityObjectinheritance。 …这似乎表明通过忽略基类,我也忽略了任何子类。 完整代码如下。 有什么方法可以解决这个问题并且“unignore”这个子类? 或者这是EF类型映射的限制? namespace EfInheritanceTest.Models.Base { public class Order { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual decimal Amount { get; set; } } } […]

Automapper,MapFrom和EF动态代理

我一直在尝试将我的域对象映射到报表视图模型。 在测试我伪造entity framework代码并使用构建器返回完全填充的pocco对象时,一切都运行良好。 现在我实际上正在访问数据库并返回数据,我看到一些奇怪的动态代理类型错误。 以下是我的代码示例: public class ContactMapping : Profile { protected override void Configure() { Mapper.CreateMap() .ForMember(dest => dest.Gender, opt => opt.MapFrom(src => src.Gender.Name)); } } 映射代码如下: var contact = GetContactFor(clientPolicy); Mapper.DynamicMap(contact, rowModel); return rowModel; 除了返回System.Data.Entity.DynamicProxies.Gender_3419AAE86B58120AA2983DA212CFFEC4E42296DA14DE0836B3E25D7C6252EF18的rowModel.Gender字段外,所有联系人字段都正确填充。 我已经看到人们在使用Map而不是DynamicMap时遇到问题的解决方案,但是我没有发现.ForMember映射失败的任何地方。 有什么建议。

XDocument使用不同的本地名称重复命名空间

我有一个XML文档,如下所示: 我使用下面的代码来修改文档的Property Element: XElement csdlEentity = csdlDoc.Root.Descendants() .Where(d => d.Name.LocalName == “EntityType”) .FirstOrDefault(e => e.Attribute(“Name”).Value == “Customer”); var csdlProperty = csdlEentity.Descendants() .Where(d => d.Name.LocalName == “Property”) .FirstOrDefault(e => e.Attribute(“Name”).Value == “Id”); XNamespace annotation = “http://schemas.microsoft.com/ado/2009/02/edm/annotation”; var attrib = new XAttribute(annotation + “StoreGeneratedPattern”, “Computed”); csdlProperty.Add(attrib); 当我保存XDocument时,Property Element看起来像: 不过我想要的是: 问题是xmlns“ http://schemas.microsoft.com/ado/2009/02/edm/annotation ”在文档的根节点中被引用两次,带有两个不同的别名/ LocalNames(注释,p1) xmlns:annotation=”http://schemas.microsoft.com/ado/2009/02/edm/annotation” xmlns:p1=”http://schemas.microsoft.com/ado/2009/02/edm/annotation” 我无法更改或篡改根节点。 如何保存文档或更新属性元素以提供所需的输出?

如何使用entity framework的Find方法查找List ,将Array作为参数传递?

我想知道如何使用Entity Framework的Find方法将Array( object[] )作为参数找到List ? 我想通过Primary Key查找所有数据。 我首先填写一个列表,其中包含我将用作参考的所有PK: List lCodigoServicos = new List(); foreach (ServicosSelecionadosModelView servicoSelecionado in lServicos.FindAll(s => !string.IsNullOrEmpty(s.selecionado) && s.selecionado.ToLower() == “on” )) lCodigoServicos.Add(servicoSelecionado.servico.SerId); 在填写我的PK列表后,我尝试通过PK查找所有数据 var lServicosInformados = db.Servicos.Find(lCodigoServicos.ToArray()); 当我尝试这个时,我收到以下错误: The specified parameter type ‘System.Int32[]’ is not valid. Only scalar types, such as System.Int32, System.Decimal, System.DateTime, and System.Guid, are supported. 请与我们分享如何正确地做到这一点。 谢谢。 解决方案如下所述,正确的解决方案是: […]

是否可以为MySql和SqlServer设置EF上下文?

我有两个entity framework上下文,一个用于MySql,一个用于sql。 如果我运行应用程序,我会收到以下错误 The default DbConfiguration instance was used by the Entity Framework before the ‘MySqlEFConfiguration’ type was discovered. 但是,如果我确实发现应用程序启动时的数据库类型为它提供了Database.SetInitializer ,我的正常sql上下文现在正在尝试使用mysql提供程序进行连接。 我的MySql上下文 [DbConfigurationType(typeof(MySqlEFConfiguration))] public class ZipCodeContext : DbContext { public DbSet ZipCodes { get; set; } } 我的正常情境 public class MyContext : DbContext { public DbSet MyClasses{get;set;} } 最后我的实际框架部分的Web配置 我希望这很清楚,我正在敲桌子

EF代码优先 – 在没有共享PK / FK的情况下配置一对一或零关系

我试图在两个实体之间建立一对一或零关系,我希望依赖实体仍然包含自己的Indentity列,而不是它是一个共享密钥。 我希望尽可能遵循约定,并且不要明确声明任何不需要显式声明的内容(因此,没有不必要的数据注释或流畅的api子句) 参与者: public class File { public int FileId {get;set;} //some omitted file properties public virtual Task Task {get;set;} } public class Task { public int TaskId {get;set;} //some omitted task properties public int FileId {get;set;} public virtual File File {get;set;} } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity().HasOptional(f => f.Task).WithRequired(t => t.File); base.OnModelCreating(modelBuilder); […]

entity framework4.1 RC(代码优先) – 实体不更新关联

我想做的事情很简单。 我有两节课: public class TownRecord { public int Id { get; set; } public string ShortName { get; set; } public string FileName { get; set; } public string tags { get; set; } public virtual TownRecordType RecordType { get; set; } public DateTime? DateScanned { get; set; } public DateTime? RecordDate { get; set; […]

使用Entity Framework在POST上获取错误 – 值不能为null。 参数名称:source

编辑 – 根据要求,这是视图…… – 开始编辑 @model salesWebTest.viewModel.vwbooking @using (Html.BeginForm()) { @Html.AntiForgeryToken() @Html.ValidationSummary(true) @Html.HiddenFor(model => model.bookings.bookingid) @Html.EditorFor(model => model.bookings.name) @foreach (var item in Model.traces) { @Html.EditorFor(m => item.contact_Name) } } – 编辑 –start original问题我有一个包含两个类的viewModel … public class vwbooking { public booking bookings { get; set; } public IEnumerable traces { get; set; } } 预订和跟踪是edmx中的实体。 我想通过一次调用来更新这两个类中的数据。 […]