1

编辑:(简化的解决方案)我试图在可以有 N 张图片的广告实体中插入一个图片实体。图片与广告相关。

广告模型:

public class  Ad
{
    public int Id { get; set; }
    public string Title { get; set; }

    public virtual ICollection<Picture> Pictures { get; set; }
}

图片型号:

public class Picture
{
    public int Id { get; set; }
    public string URL { get; set; }

    public int Ad_Id { get; set; }
    public virtual Ad Ad { get; set; }

    public int PictureType_Id { get; set; }
    public virtual PictureType PictureType { get; set; }
}

图片类型型号:

public class PictureType
{
    public int Id { get; set; }
    public string Name { get; set; }
}

广告服务:

Picture picture = new Picture()
{
    Ad_Id = adId,
    Filename = newFileName,
    PictureType_Id = pictureType.Id
};

_pictureService.CreatePicture(picture);

图片服务:

public void CreatePicture(Picture picture)
{
    _pictureRepository.Add(picture);
    _pictureRepository.Save();
}

错误:此代码生成的查询是:

执行阅读器“插入 [dbo].[Pictures]([Name], [Filename], [URL], [PictureType_Id], [Ad_Id], [PictureType_Id1], [Ad_Id1]) 值 (null, @0, null, @ 1,@2,空,空)”

我得到了错误:

抛出:“无效的列名‘PictureType_Id1’。无效的列名‘Ad_Id1’。” (System.Data.SqlClient.SqlException) 异常消息 =“无效的列名 'PictureType_Id1'。\r\n无效的列名 'Ad_Id1'。异常类型 = “System.Data.SqlClient.SqlException”,异常 WinRT 数据 = “”

4

2 回答 2

1

您缺少广告和图片之间的 PK/FK 关系。默认值为 Ad_Id

public class Picture
{
    public int Id { get; set; }
    public string URL { get; set; }

    public int Ad_Id { get; set; }
    public virtual Ad Ad { get; set; }
}

您的数据库中也需要相同的内容。

并且需要在实体之间定义关系(像这样)

this.HasMany(c => c.AdPictures)
    .WithRequired(p => p.Ad)
    .HasForeignKey(k => k.Ad_Id);

根据附加信息,问题似乎是:

Ad与中间表有关系,AdPicturePicture与哪里有直接关系Ad,因为它也应该与中间表有关系AdPicture

这个:

public class Picture
{
    public int Id { get; set; }
    public string URL { get; set; }

    public virtual AdPicture AdPicture { get; set; }
}

或这个:

public class Picture
{
    public int Id { get; set; }
    public string URL { get; set; }

    public virtual ICollection<AdPicture> AdPictures { get; set; }
}
于 2013-02-06T14:47:59.993 回答
0

这有意义吗?:

图片模型的变化:

public class Picture
{
    // Primary properties
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
    public string Filename { get; set; }
    public string URL { get; set; }

    // Navigation properties
    //public int PictureType_Id { get; set; }
    public virtual PictureType PictureType { get; set; }

    //public int Ad_Id { get; set; }
    public virtual Ad Ad { get; set; }
}

广告服务的变化:

// Insert Picture 
Picture picture = new Picture()
{
    Ad = _adRepository.GetById(adId),
    Filename = newFileName,
    PictureType = _pictureTypeService.GetPictureTypeById(pictureType.Id)
};

_pictureService.CreatePicture(picture);

其他一切都保持不变。

现在它正在工作,但它似乎不是最好的解决方案,因为我有 2 次往返数据库以获取 Ad 实体和 PictureType 实体。

我对吗?

于 2013-02-07T02:32:09.153 回答