c# - 从部分类 c# 调用 Base 实体构造函数

标签 c# .net entity-framework inheritance

考虑以下场景,

我有通过 DB First 方法创建的实体,

// auto-generated class
public partial DBEntity : DBContext
{
   public DBEntity ()
        : base("name=DBEntity ") // gets connection string from api.config
    {
    }
}

有时我需要构建和传递连接字符串,所以我创建了这个,

public partial class DBEntity 
{
    public DBEntity (String connectionString)
    {
        if (string.IsNullOrEmpty(connectionString))
            new DBEntity ();
        else
            base(connectionString); // this one fails
    }
}

最好的方法是什么

  1. 如果连接字符串为空,调用无参数实体构造函数?
  2. 如果 conn 字符串不为空,则从参数化构造函数调用基本构造函数并实现下面发生的事情,

public DBEntity (String connectionString) : base (connectionString)

我会一直做一个new DBEntity(string)

最佳答案

您不能更改在构造函数中创建的对象的引用。换句话说,当您调用构造函数时,对象会在内存中初始化,而您只是在设置它。

相反,您应该使用允许您控制返回类型的静态方法。您可以将它放在另一个类中,例如 DbEntityFactory 并调用 DbEntityFactory.Create 或将它放在您的 DbEntity 类中并调用 DbEntity.Create

public static DBEntity Create(String connectionString)
{
    if (string.IsNullOrWhiteSpace(connectionString)) //use this instead of IsNullOrEmpty
        return new DBEntity();
    else
        return new DBEntity(connectionString); 
}

关于c# - 从部分类 c# 调用 Base 实体构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31132678/

相关文章:

.net - ClickOnce 部署问题

c# - Entity Framework Core 从现有数据库创建模型

entity-framework - Entity Framework Linq 将 lambda 表达式嵌入到可重用函数中

c# - 在 iOS 中实现加密逻辑的最佳实践是什么?

c# - 如何扩展控件模板(例如使用第三种颜色)

c# - 重构ifs

c# - 当 DateTime 传递给采用 Nullable DateTime 的方法时,为什么我会丢失 DateTime 的毫秒数?

c# - vNext 类库中的目标 Android/iOS

.net - 在 Visual Studio 监 window 口中更改 DateTime 的默认显示

c# - 使用 linq 获取逗号分隔的实体集合列表