2

当我尝试 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 列。

这里出了什么问题?

4

0 回答 0