You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复替换ADO.NET Entity Data Model后出现的CS1729构造函数错误

解决ADO.NET Entity Data Model移除并添加模型后的CS1729错误

错误信息

Error CS1729
'object' does not contain a constructor that takes 2 arguments DataLayer
at :base(..)

问题原因

错误根源是Entities类未正确继承EF的上下文基类(DbContext或ObjectContext)。移除旧模型并添加新模型后,EF自动生成的Entities partial类代码可能被重置,导致你手动编写的这个partial类的基类默认变为object,此时调用base(connectionString, contextOwnsConnection)就会找不到匹配的构造函数。

解决步骤

  • 确认自动生成的Entities类基类
    找到EF模型生成的另一个Entities partial类文件(通常在.tt模板生成的代码中,比如HOTEL.Context.cs),确保它继承自DbContext(EF6及以上版本)或ObjectContext(早期EF版本)。正确的自动生成代码类似:
    public partial class Entities : DbContext
    {
        // 自动生成的构造函数、DbSet集合等内容
    }
    
  • 修正构造函数的基类调用
    只要Entities类正确继承DbContext,DbContext本身就提供了接受DbConnection和bool参数的构造函数,此时base(connectionString, contextOwnsConnection)调用会正常生效。
  • 核对模型元数据路径
    代码中entityBuilder.Metadata指定的HOTEL.csdl|ssdl|msl要与新添加的模型文件名一致。如果新模型名称不是HOTEL,需修改为对应名称,例如新模型名为NewHotel,则路径改为:
    entityBuilder.Metadata = @"res://*/NewHotel.csdl|res://*/NewHotel.ssdl|res://*/NewHotel.msl";
    
  • 清理并重新生成项目
    移除旧模型后可能残留编译缓存,右键项目选择清理,再执行重新生成,确保所有代码编译正确。

优化后的代码示例

namespace DataLayer
{
    [Serializable]
    public partial class Entities 
    {
        private Entities(DbConnection connection, bool contextOwnsConnection = true)
            : base(connection, contextOwnsConnection) { }
        
        public static Entities CreateEntities(bool contextOwnsConnection = true)
        {
            // 使用using自动释放文件流,避免资源泄漏
            using (FileStream fs = File.Open("connectdb.dba", FileMode.Open, FileAccess.Read))
            {
                BinaryFormatter bf = new BinaryFormatter();
                connect cp = (connect)bf.Deserialize(fs);

                string servername = Encryptor.Decrypt(cp.servername, "qwertyuiop", true);
                string database = Encryptor.Decrypt(cp.database, "qwertyuiop", true);

                EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
                entityBuilder.Provider = "System.Data.SqlClient";
                entityBuilder.ProviderConnectionString = $"Data Source={servername};Initial Catalog={database};Integrated Security=true";
                // 确认元数据路径与新模型匹配
                entityBuilder.Metadata = @"res://*/HOTEL.csdl|res://*/HOTEL.ssdl|res://*/HOTEL.msl";

                EntityConnection connection = new EntityConnection(entityBuilder.ConnectionString);
                return new Entities(connection, contextOwnsConnection);
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者Phuc T.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:30:02