我有一个父抽象类:
$path = "C:\Batch\Output\WarehousingControl\WarehousingControl.csv"
$path = $path.Replace(".csv", "_" + (Get-Date -f "yyy-MM-dd") + ".csv")
$ds.Tables[0] |
Export-csv -delimiter ";" -path "C:\temp\TempWarehousingControl.csv" -NoTypeInformation -Force -Encoding UTF8
Get-Content C:\temp\TempWarehousingControl.csv |
%{ $_ -replace """""", "NULL"} |
%{ $_ -replace """", ""} |
Out-File -FilePath $path -Force -Encoding utf8
我想在实例化时设置public abstract class Transaction
{
public int ID { get; set; }
public string TransactionDescr { get; set; }
public DateTime TransactionDate { get; set; }
public int TransactionType { get; protected set; }
}
属性的一些真正的子类。
在我的数据库中,我有一个TransactionType
列,我将其用作鉴别器。
这是我的想法:
TransactionType
在类构造函数中设置public class TransactAdd : Transaction
{
public TransactAdd()
{
TransactionType = 1;
}
}
public class TransactDeduct : Transaction
{
public TransactDeduct()
{
TransactionType = 2;
}
}
public class TransactTransfer : Transaction
{
public TransactTransfer()
{
TransactionType = 3;
}
}
是个好主意吗?我对吗?还是有更好的方法?
顺便说一句,最后,我使用Dapper将父类TransactionType
保存在数据库中。
我添加了解决方案,感谢@flobjective
UPDATE(溶液)
Transaction
答案 0 :(得分:1)
您的解决方案的一个弱点是您必须记住设置事务类型。如果其他人添加了新的Transaction类,他可能会忘记,这会导致TransactionType
的{{1}}值错误。
除此之外1
已经保护了setter,这意味着某人以后可能会改变可能导致问题的类型。
您可以创建一个抽象方法intTransactionType
,强制每个具体实现返回一个int。但是,仍然无法确保为所有类型使用唯一的整数。
答案 1 :(得分:0)
我认为这对我来说可能是一个解决方案,但只读数据不会写入数据库,我需要将这些数据作为复合键的一部分。现在,如果有一种方法可以将鉴别器作为我的复合键策略的一部分,那么它将是完美的
Public Overrides ReadOnly Property AddressType As AddressType
Get
Return AddressType.Consignee
End Get
End Property