[英]Calling Base entity constructor from partial class c#
考虑以下情况,
我有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
}
}
什么是最好的方式
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);
}
您不能延迟对基础构造函数的调用。 基础构造函数始终首先触发。 这是为了防止你有一个半初始化的类。
我想你应该创建两个构造函数,如果你想将调用偏离基类。 或者,如dotctor所述 :创建一个工厂类。 如果这将起作用可能取决于使用泛型和初始化这些泛型类型的实例的需要。
目前你允许null
或空字符串作为connectionString
的值,我认为这是错误的。
如果要使用具有参数connectionString
的构造函数,则必须提供有效值。 如果你这样做,那么整个问题就会消失,因为那个构造函数不再具有二元性。
按照“构造函数中没有逻辑”这个简单的规则,我将提供两个构造函数 - 一个有一个,一个没有参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.