Tag: ef code first

entity framework中的单向一对一关系

下面的一对一关系示例抛出exception public class User { public int Id { get; set; } public Address Address { get; set; } } public class Address { public int Id { get; set; } public User User { get; set; } } 例外说: 无法确定类型“ConsoleApplication1.Address”和“ConsoleApplication1.User”之间关联的主要结尾。 必须使用关系流畅API或数据注释显式配置此关联的主要结尾。 如果我从地址中删除用户属性但我不想要它。 我怎么能有这样的关系,没有例外?

Force Entity Framework 5使用datetime2数据类型

在使用Code-First模型时,是否可以全局设置Entity Framework DbContext以将datetime2用于System.DateTime所有属性? 我可以使用HasColumnType()方法为每个列执行此操作,但对于现有的代码库,我想要一个全局解决方案。

如何在entity framework代码中有多对多关联

我刚刚开始使用EF,我观看了一些很棒的教程video。 我坚持以下。 我有一个文件集合的类,我希望这些与事件和/或人有关 public class file{ public int id {get;set;} public string path {get;set;} } public event { public int id {get;set;} public string eventname {get;set} public virtual ICollection files {get;set;} public event(){ files = new list();} } public person { public int id {get;set;} public string name {get;set} public virtual ICollection files {get;set;} public […]

将ASP.NET标识集成到现有的DbContext中

我正在使用VS2013,.NET 4.5.1中的ASP.NET MVC 5项目,该项目使用Entity Framework 6 Code-First。 我有一个体面的数据库建立和有点工作(项目大约两周)。 我想现在整合用户身份validation,但我不知道如何处理它。 在花费了大部分时间进行研究之后,我决定为新的ASP.NET身份框架提供必须编写自定义成员资格或角色提供程序的机会。 我感到困惑的是如何使用现有的数据库/模型完成所有工作。 目前我有一个名为Employee的对象,它包含基本的员工信息(暂时)。 在整天思考了这个问题之后,我决定将身份validation与它分离成一个User对象,这正是Identity想要的。 这就是说我如何使它全部工作? 这是我的Employee类: public class Employee : Person { public int EmployeeId { get; set; } public byte CompanyId { get; set; } public string Name { get { return String.Format(“{0} {1}”, this.FirstName, this.LastName); } } public string Password { get; set; } […]

由于一个或多个外键属性不可为空,因此无法更改关系

在使用EF更新期间出现以下错误: 操作失败:无法更改关系,因为一个或多个外键属性不可为空。 当对关系进行更改时,相关的外键属性将设置为空值。 如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。 有没有一般的方法来查找哪些外键属性导致上述错误? [更新] 对于以下代码导致上述错误的一种情况(我在断开连接的环境中工作,所以我使用graphdiff更新我的对象图),当它想要运行_uow.Commit(); : public void CopyTechnicalInfos(int sourceOrderItemId, List targetOrderItemIds) { _uow = new MyDbContext(); var sourceOrderItem = _uow.OrderItems .Include(x => x.NominalBoms) .Include(“NominalRoutings.NominalSizeTests”) .AsNoTracking() .FirstOrDefault(x => x.Id == sourceOrderItemId); var criteria = PredicateBuilder.False(); foreach (var targetOrderItemId in orderItemIds) { int id = targetOrderItemId; criteria = criteria.OR(x => x.Id == id); } […]

我应该如何设置集成测试以将测试数据库与Entity Framework一起使用?

我正在为应用程序编写集成测试,但无法找到有关如何为我的集成套件设置测试数据库的最佳实践。 我正在使用Entity Framework代码优先的ASP.NET MVC4应用程序。 我可以确认我的测试项目中的测试默认与我的机器上的本地开发数据库通信。 这并不理想,因为我希望每次运行测试时都有一个新的数据库。 如何设置我的测试项目以便我的测试与单独的实例进行通信? 我假设可以设置SQL Server Compact Edition实例,但我不知道如何配置它。

entity framework:多对多关系中的重复记录

我有以下entity framework代码的第一个代码。 创建表并插入数据。 但是俱乐部表中有重复的记录。 我的业务是: – 使用俱乐部创建应用创建俱乐部 使用person app创建人员 如何避免重复输入? static void Main(string[] args) { Database.SetInitializer(new MyInitializer()); CreateClubs(); InsertPersons(); } public static void CreateClubs() { string connectionstring = “Data Source=.;Initial Catalog=NerdDinners;Integrated Security=True;Connect Timeout=30”; using (var db = new NerdDinners(connectionstring)) { Club club1 = new Club(); club1.ClubName = “club1”; Club club2 = new Club(); club2.ClubName = […]

我应该如何访问Entity Framework Code First中的计算列?

我在ASP.NET MVC应用程序中使用Entity Framework Code First。 我的一个类有几列添加在一起。 我通过在数据库初始化程序中运行alter table脚本将这些列存储为表中的计算列。 让我们说这堂课看起来像: public class Bond { public decimal ParAmountOfIssuance { get; set; } public decimal AccruedInterest { get; set; } public decimal Premium { get; set; } public decimal OriginalIssueDiscount { get; set; } } alter脚本如下: alter table Bonds add TotalSources as (ParAmountOfIssuance + AccruedInterest + Premium – […]

entity framework和多个模式

我正在尝试设置我的dbContext,以便它可以在单个Oracle数据库中处理多个模式。 我不想要一个单片dbContext文件,所以我想出了以下内容: public class oraDbContext : DbContext { static oraDbContext() { Database.SetInitializer(null); } public oraDbContext(string connName) : base(“Name=” + connName) { } public _schema1 schema1 = _schema1.Instance; public _schema2 schema2 = _schema2.Instance; protected override void OnModelCreating(DbModelBuilder modelBuilder) { schema1.OnModelCreating(modelBuilder); schema2.OnModelCreating(modelBuilder); } } 模式文件如下所示: public sealed class _schema1 { private static readonly _schema1 instance = new […]

建模多态关联数据库优先与代码优先

我们有一个数据库,其中一个表包含可以是其他几个表的子记录。 它有一个“软”外键,由所有者的Id和表名组成。 这种(反)模式被称为“多态关联”。 我们知道它不是有史以来最好的数据库设计,我们会在适当的时候改变它,但不会在不久的将来改变它。 让我举一个简化的例子: Event , Person和Product都有评论记录。 如您所见,没有严格的FK约束。 在Entity Framework中,可以通过将Comment化为EventComment等来支持这个模型,并让Event有一个EventComments集合等: 从数据库生成基本模型后,手动添加子类和关联。 OwnerCode是此TPH模型中的鉴别器。 请注意, Event , Person和Product是完全不同的实体。 为它们建立一个公共基类是没有意义的。 这是数据库优先的。 我们的现实模型就像这样,没问题。 好。 现在我们想要转向代码优先。 所以我开始将数据库逆向工程化为代码优先模型(EF Power Tools),然后继续创建子类并映射关联和inheritance。 试图连接到Linqpad中的模型。 那是麻烦开始的时候。 尝试使用此模型执行查询时,它会抛出InvalidOperationExeception 外键组件“OwnerId”不是“EventComment”类型的声明属性。 validation它是否未从模型中明确排除,并且它是有效的原始属性。 当我有双向关联并且OwnerId被映射为Comment的属性时会发生这种情况。 我的EventMap类( EntityTypeConfiguration )中的映射如下所示: this.HasMany(x => x.Comments).WithRequired(c => c.Event) .HasForeignKey(c => c.OwnerId); 所以我尝试在模型中没有OwnerId映射关联: this.HasMany(x => x.Comments).WithRequired().Map(m => m.MapKey(“OwnerId”)); 这会抛出MetaDataException 指定的架构无效。 错误:(10,6):错误0019:类型中的每个属性名称必须是唯一的。 已定义属性名称“OwnerId”。 (11,6):错误0019:类型中的每个属性名称必须是唯一的。 已定义属性名称“OwnerId”。 如果我删除三个实体注释关联中的两个,那就没关系,但当然这不是治愈方法。 […]