C# 将一个属性的值设置为包含主键的属性的值
我使用的是C#实体框架。我已构建以下属性,如下所示:C# 将一个属性的值设置为包含主键的属性的值,c#,entity-framework,C#,Entity Framework,我使用的是C#实体框架。我已构建以下属性,如下所示: private int _CashTransactNO; [DatabaseGeneratedOption(DatabaseGeneratedOption.Identity)] public int CashId { get; set; } public int CashTransactNO { get { return _CashTransactNO; } set { _CashTransactN
private int _CashTransactNO;
[DatabaseGeneratedOption(DatabaseGeneratedOption.Identity)]
public int CashId { get; set; }
public int CashTransactNO
{
get { return _CashTransactNO; }
set
{
_CashTransactNO = CashId;
}
}
当我运行windows窗体应用程序时。”“CashTransactionNo”始终返回零的值,而不是从“CashId”生成的主键
有没有办法解决这个问题,这样我就可以将递增的键值传递到“cashtransalno”并保存到MSSQL数据库中?将您的
public int CashId{get;set;}
更改为:
private int _CashId;
[DatabaseGeneratedOption(DatabaseGeneratedOption.Identity)]
public int CashId {
get
{
return _CashId;
}
set
{
_CashId = value;
CashTransactNO = _CashId;
}
}
然后您可以留下您的现金交易记录no
如下:
public int cashtransactionno{get;private set;}
不需要
\u cashtransalno
实体框架中的主键名称是ID
或classnameID
。当您执行[DatabaseGeneratedOption(DatabaseGeneratedOption.Identity)]
时,它会自动从1递增,因为主键不能为零。如果主键有任何其他命名约定,可以使用[Key]
属性将其设置为主键或更改命名约定。我猜这里的\u Cashid
没有被识别为主键,因此它可以为null,因此它以零递增。我希望这有助于解决问题。也许我遗漏了什么,但为什么不在CashTransactionNo的getter中返回CashId,然后删除private setter?另外……您正在呼叫private setter吗?我在上面的代码中没有看到它,必须调用它才能将值更改为零以外的任何值。更大的图景是什么使这样做成为必要的?一个仅吞下其输入的值的setter是。。。疯子对于其余部分,您可能只是遇到了在SaveChanges
之前未分配CashId
的情况。也尝试过这样做,CashId的值反映在CashTransact属性中,但数据库中的值仍然为零。同一类中的所有其他属性正在更新其值,正如EF中SaveChages()方法中所预期的那样,但数据库中的Transact列为零@RobertOmete您应该更新您的问题,将您要保存的详细信息包括在数据库中。@DavidSherret您是对的。更重要的是,由于我无法在C中生成函数,因此插入时自动递增,因此最好以现有Id列为基础