gpt4 book ai didi

c# - 将 Effort 与 Entity Framework 结合使用时,更新模型会导致从 DbContext 中删除接口(interface)

转载 作者:行者123 更新时间:2023-11-30 20:41:02 26 4
gpt4 key购买 nike

目前,我正在尝试将 Effort ( https://effort.codeplex.com/ ) 与我的 Entity Framework 6 解决方案结合使用,以允许在不需要数据库连接的情况下进行单元测试(请参阅 http://www.codeproject.com/Articles/460175/Two-strategies-for-testing-Entity-Framework-Effort )。在我的项目中一切正常,这是带有接口(interface)的 DbContext 和 Effort 所需的重载构造函数:

namespace Cssd.IT.PortalIntegration.DataAccess.HR.Dao
{
using System;
using System.Data.Common;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;

public partial class HRADDbContext : DbContext, IHRADDbContext
{
public HRADDbContext() : base("name=HRADDbContext")
{
}

public HRADDbContext(string nameOrConnectionString)
: base(nameOrConnectionString)
{
this.Configuration.LazyLoadingEnabled = false;
}

public HRADDbContext(DbConnection connection)
: base(connection, true)
{
this.Configuration.LazyLoadingEnabled = false;
}

public virtual DbSet<CCS_DEPT_TBL> CCS_DEPT_TBL { get; set; }
public virtual DbSet<CCS_HR_AD_SYNC> CCS_HR_AD_SYNC { get; set; }
}
}

问题是,如果我通过选择“从数据库更新模型...”来更新 .edmx 文件,那么它将重新生成上下文文件:

namespace Cssd.IT.PortalIntegration.DataAccess.HR.Dao
{
using System;
using System.Data.Common;
using System.Data.Entity;

public partial class HRADDbContext : DbContext
{
public HRADDbContext() : base("name=HRADDbContext")
{
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}

public virtual DbSet<CCS_DEPT_TBL> CCS_DEPT_TBL { get; set; }
public virtual DbSet<CCS_HR_AD_SYNC> CCS_HR_AD_SYNC { get; set; }
}
}

所以每次都得回去手动更新上面的Context.cs文件。此外,从 POCO CCS_DEPT_TBL 文件中删除 [Key]

有什么方法可以设置我的 Entity Framework 项目,以便它不会在我每次从数据库更新模型时破坏接口(interface)和重载的构造函数? TIA。

更新:

由于该类是部分类,我只是确保将接口(interface)和重载的构造函数放在一个单独的文件中,该文件不会自动生成。

更新 2:

好的,知道了,只是将其添加为一个单独的文件,将 DEPTID 从原始 POCO 文件中取出,但它仍然把 DEPTID 在生成的文件中,所以在更新后构建中断,因为在同一个类中有两个 DEPTID 值:

namespace Cssd.IT.PortalIntegration.DataAccess.HR.Dao
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

public partial class CCS_DEPT_TBL
{
[Key]
public string DEPTID { get; set; }
}
}

那么,如何防止它在生成的类文件中生成 DEPTID,因为它已经在上面的部分类文件中了?

最佳答案

是的,该类被定义为分部类。创建一个新文件,该文件也声明相同的部分类并在其中添加您的其他方法。

至于[Key]属性丢失,可以尝试使用MetadataType属性并将所有元数据放在那里。

namespace Cssd.IT.PortalIntegration.DataAccess.HR.Dao
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

[MetadataType(typeof(CCS_DEPT_TBL_Meta))]
public partial class CCS_DEPT_TBL
{
... Your additional constructors and methods here ...
}
public class CCS_DEPT_TBL_Meta
{
[Key]
public string DEPTID { get; set; }
}
}

关于c# - 将 Effort 与 Entity Framework 结合使用时,更新模型会导致从 DbContext 中删除接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32658034/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com