我生成的SQL语句如下所示。请注意,参数@ p1和@ p2根本没有使用,也没有必要。为什么会这样?我们如何删除它们?
注意:对于所有列,UpdateCheck都是从不。
注意:数据库已正确更新。
ISSUE
UPDATE [dbo].[BankAccount]
SET [Status] = @p3
WHERE [BankAccountID] = @p0
-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [10000]
-- @p1: Input NChar (Size = 10; Prec = 0; Scale = 0) [Fixed ]
-- @p2: Input NChar (Size = 10; Prec = 0; Scale = 0) [Savings ]
-- @p3: Input NChar (Size = 10; Prec = 0; Scale = 0) [FrozenFA]
自动生成的课程
[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.BankAccount")]
[InheritanceMapping(Code = "Fixed", Type = typeof(FixedBankAccount), IsDefault = true)]
[InheritanceMapping(Code = "Savings", Type = typeof(SavingsBankAccount))]
public partial class BankAccount : INotifyPropertyChanging, INotifyPropertyChanged
表
CREATE TABLE [dbo].[BankAccount](
[BankAccountID] [int] NOT NULL,
[AccountType] [nchar](10) NOT NULL,
[OpenedDate] [datetime] NULL,
[Status] [nchar](10) NULL,
[AccountOwnerID] [int] NULL,
CONSTRAINT [PK_BankAccount] PRIMARY KEY CLUSTERED
(
[BankAccountID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CODE
public class LijosSimpleBankRepository : ILijosBankRepository
{
public System.Data.Linq.DataContext Context
{
get;
set;
}
public List<DBML_Project.BankAccount> GetAllAccountsForUser(int userID)
{
IQueryable<DBML_Project.BankAccount> queryResultEntities = Context.GetTable<DBML_Project.BankAccount>().Where(p => p.AccountOwnerID == userID);
return queryResultEntities.ToList();
}
public List<T> GetAllAccountsofType<T>() where T : DBML_Project.BankAccount
{
var query = from p in Context.GetTable<DBML_Project.BankAccount>().OfType<T>()
select p;
List<T> typeList = query.ToList();
return typeList;
}
public virtual void UpdateAccount(DBML_Project.BankAccount bankAcc)
{
//UPDATE statement will be called only if there has happened a change
Context.SubmitChanges();
}
}
namespace ApplicationService_Bank
{
public class BankAccountAppService
{
public RepositoryLayer.ILijosBankRepository AccountRepository { get; set; }
public void FreezeAllAccountsForUser(int userId)
{
IEnumerable<DBML_Project.BankAccount> accounts = AccountRepository.GetAllAccountsForUser(userId);
foreach (DBML_Project.BankAccount acc in accounts)
{
string getTypeResult = Convert.ToString(acc.GetType());
acc.Freeze();
AccountRepository.UpdateAccount(acc);
}
}
}
}
答案 0 :(得分:1)
所以它将鉴别器值包括为参数?据推测,在某些情况下在继承相关的更新中使用那些(可能作为并发检查的一部分,虽然看起来你已经禁用了它),而且它只是真的很难并且不值得在不需要它的情况下忽略它们,或者只是:一个bug悄悄进入。无论哪种方式,它都没有任何伤害,除了使查询稍微大一点。不足以引起注意。