当我尝试 SaveChanges() 插入新实体时,出现以下异常。
System.Data.Entity.Infrastructure.DbUpdateException : An error occurred while updating the entries. See the inner exception for details.
----> System.Data.UpdateException : An error occurred while updating the entries. See the inner exception for details.
----> System.Data.SqlClient.SqlException : Invalid column name 'LD_Content'.
Invalid column name 'LD_File'.
我在这里没有使用 Code First 或 Database First 方法。数据库是预先存在的,但实体代码是从自定义模板生成的。
这些是数据库表:
CREATE TABLE [dbo].[Licences](
[L_ID] [uniqueidentifier] NOT NULL,
CONSTRAINT [PK_Licences] PRIMARY KEY NONCLUSTERED
(
[L_ID] ASC
))
GO
ALTER TABLE [dbo].[Licences] WITH CHECK ADD CONSTRAINT [FK_Licences_LicenceData] FOREIGN KEY([L_ID])
REFERENCES [dbo].[LicenceData] ([LD_ID])
GO
CREATE TABLE [dbo].[LicenceData](
[LD_ID] [uniqueidentifier] NOT NULL,
[LD_Content] [varbinary](max) NOT NULL,
[LD_File] [varbinary](max) NULL,
CONSTRAINT [PK_LicenceData] PRIMARY KEY NONCLUSTERED
(
[LD_ID] ASC
))
这些是实体:
[Table("Licences")]
public class Licence
{
[Required, Display(Name="ID"), Column("L_ID")]
public Guid ID { get; set; }
public virtual LicenceFile File { get; set; }
[Required, Display(Name = "Content"), Column("LD_Content")]
public virtual string Content { get; set; }
}
[Table("LicenceData")]
public class LicenceFile
{
[Required, Display(Name = "ID"), Column("LD_ID")]
public Guid ID { get; set; }
[Display(Name = "File"), Column("LD_File")]
public byte[] File { get; set; }
}
这是映射:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Licence>()
.Map(m =>
{
m.Properties(licence => new {licence.Content});
m.ToTable("LicenceData");
});
modelBuilder.Entity<Licence>().HasRequired(i => i.File).WithRequiredPrincipal();
base.OnModelCreating(modelBuilder);
}
该实体是使用其导航属性集创建的:
new Licence
{
Content = "content",
File = new LicenceFile()
}
总结一下,有两个表是一对一的关系。其中一个实体 Licence 映射到其表(Licences),也映射到另一个表的列之一(实体拆分)。第二个实体 LicenceFile 映射到另一个表 (LienceData) 的 ramaining 列。
这里出了什么问题?