我首先使用的是Ef 4.1代码。
我收到了以下错误并且不确定我做错了什么:
保存未公开其关系的外键属性的实体时发生错误。 EntityEntries属性将返回null,因为无法将单个实体标识为异常源。通过在实体类型中公开外键属性,可以更轻松地在保存时处理异常。有关详细信息,请参阅InnerException。
内部异常:
列名“GrantApplicationIs”无效。 列名称“GrantApplication_Id”无效。
我有一个授权申请,当我将其保存到数据库时,我正在尝试添加一个审核条目。
这是我的背景:
public class HbfContext : DbContext
{
public DbSet<Bank> Banks { get; set; }
public DbSet<AccountType> AccountTypes { get; set; }
public DbSet<GrantApplication> GrantApplications { get; set; }
public DbSet<AuditEntry> AuditEntries { get; set; }
}
拨款申请类:
public class GrantApplication
{
public int Id { get; set; }
public string EmployeeNumber { get; set; }
public string Title { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual ICollection<AuditEntry> AuditEntries { get; set; }
}
AuditEntry类:
public class AuditEntry
{
public int Id { get; set; }
public int OldValue { get; set; }
public int NewValue { get; set; }
public DateTime AuditDate { get; set; }
public string EmployeeNumber { get; set; }
public int GrantApplicationIs { get; set; }
public GrantApplication GrantApplication { get; set; }
}
这是我向新的授权申请添加新审计条目的方式:
public void Insert(GrantApplication grantApplication)
{
DateTime currentDateTime = DateTime.Now;
string submitterEmployeeNumber = "123456";
grantApplication.SignatureDate = currentDateTime;
grantApplication.SubmitterEmployeeNumber = submitterEmployeeNumber;
// Add audit entry
grantApplication.AuditEntries = new List<AuditEntry>();
grantApplication.AuditEntries.Add(new AuditEntry
{
NewValue = grantApplication.GrantApplicationStateId,
AuditDate = currentDateTime,
EmployeeNumber = submitterEmployeeNumber
});
// Insert the new grant application
grantApplicationRepository.Insert(grantApplication);
}
更新
我的表格结构如下:
GrantApplications
表:
Id int
EmployeeNumber varchar(6)
Title varchar(10)
FirstName varchar(50)
LastName varchar(50)
AuditEntries
表:
Id int
GrantApplicationId int
OldValue int
NewValue int
AuditDate datetime
EmployeeNumber varchar(6)
我不知道GrantApplicationIs
和GrantApplication_Id
是什么以及为什么它们是列名。从什么?
答案 0 :(得分:0)
对我来说,看起来这是问题的根源:
public int GrantApplicationIs { get; set; }
这是一个错字吗?不是GrantApplicationId
吗?无论如何,效果是:
GrantApplicationIs
未被识别为GrantApplication
导航属性的外键属性。相反,它是一个普通的标量属性。如果您在数据库中没有这样的列,则会出现第一个例外情况:无效的列名'GrantApplicationIs'。
EF使用FK数据库列的默认名称GrantApplication_Id
。如果您在数据库中没有这样的列,则会出现第二个例外情况:无效的列名'GrantApplication_Id'。
解决方案:
GrantApplicationId
)GrantApplicationIs
确实是您的FK属性(并在数据库中创建一个合适的列)。