私は、比較的シンプルな関係マッピング(1対多)であると思っていたものを理解しようとしました。EF 6関係:モデル生成中に1つまたは複数の検証エラーが検出されました
のは、私がモデルに持っているものの上に行こう:
ContentExternalLinkマッピングに今
public class ContentExternalLink
{
public ContentExternalLink()
{
ContentTagAssignments = new List<ContentTagAssignment>();
}
[Key]
public string LinkId { get; set; }
public string LinkTypeId { get; set; }
public string LinkTitle { get; set; }
public string LinkUrl { get; set; }
public string LinkSource { get; set; }
public string LinkPhoneNumber { get; set; }
public DateTime LinkDate { get; set; }
public DateTime LinkCreatedDate { get; set; }
public DateTime LinkModifiedDate { get; set; }
[ScriptIgnore]
public virtual ICollection<ContentTagAssignment> ContentTagAssignments { get; set; }
}
ContentTagAssignmnent
public class ContentTagAssignment
{
public ContentTagAssignment()
{
this.ContentExternalLink = new ContentExternalLink();
}
[Key]
public string TagId { get; set; }
[Key]
public string ArticleId { get; set; }
public bool IsPrimary { get; set; }
public DateTime CreatedDate { get; set; }
[ScriptIgnore]
public virtual ContentExternalLink ContentExternalLink { get; set; }
}
:
ContentExternalLinkMap
public class ContentExternalLinkMap : EntityTypeConfiguration<ContentExternalLink>
{
public ContentExternalLinkMap()
{
this.ToTable("content_external_link", "dbo");
this.HasKey(c => c.LinkId);
this.Property(c => c.LinkId).HasColumnName("link_id");
this.Property(c => c.LinkTypeId).HasColumnName("link_type_id");
this.Property(c => c.LinkTitle).HasColumnName("link_title");
this.Property(c => c.LinkUrl).HasColumnName("link_url");
this.Property(c => c.LinkSource).HasColumnName("link_source");
this.Property(c => c.LinkPhoneNumber).HasColumnName("link_phone_number");
this.Property(c => c.LinkDate).HasColumnName("link_date");
this.Property(c => c.LinkCreatedDate).HasColumnName("link_created_date");
this.Property(c => c.LinkModifiedDate).HasColumnName("link_modified_date");
}
}
ContentTagAssignmnetMap
public class ContentTagAssignmentMap : EntityTypeConfiguration<ContentTagAssignment>
{
public ContentTagAssignmentMap()
{
this.ToTable("content_tag_assignment", "dbo");
this.HasKey(t => new {t.TagId, t.ArticleId});
this.Property(t => t.TagId).HasColumnName("tag_id");
this.Property(t => t.ArticleId).HasColumnName("article_id");
this.Property(t => t.IsPrimary).HasColumnName("is_primary_tag");
this.Property(t => t.CreatedDate).HasColumnName("created_date");
this.HasOptional(t => t.ContentExternalLink)
.WithMany(t => t.ContentTagAssignments)
.HasForeignKey(t => new {t.TagId, t.ArticleId});
}
}
ContentTagAssignmentにおける情報でarticleIDと一致しますがLinkIdのような関係は奇妙側に間違いです。
私はContentTagAssignmentMapに次のように試してみた:
//this.HasOptional(t => t.ContentExternalLink)
// .WithMany(t => t.ContentTagAssignments)
// .HasForeignKey(t => t.ContentExternalLink);
this.HasOptional(x => x.ContentExternalLink)
.WithMany(x=>x.ContentTagAssignments)
.Map(x => x.MapKey("LinkId").HasColumnAnnotation("LinkId","ArticleId",null));
//this.Map(m =>
// {
// m.Properties(x => x.ArticleId);
// m.ToTable("content_tag_assignment");
// })
// .Map(p =>
// {
// p.Properties(x => x.ContentExternalLink.LinkId);
// p.ToTable("ContentExternalLink");
// });
コメント関係は動作しません。動作するもの(初期ページの読み込みに失敗しないという点で)。ただし、ContentExternalLinkからリストにアクセスしようとすると、次のエラーが表示されます。{"無効な列名 'LinkId'。\ r \ n無効な列名 'LinkId'。"}
失われた...
質問
基本的には、必ずしもすべてのContentExternalLinkは、それにタグが割り当てられています。しかし、ContentExternalLinkにContentTagAssignmentsがある場合は、それらのリストを取得できるはずです。また、TagIdとArticleIdは文字列(guid)です。
誰にも提案はありますか?
ありがとうございました!
あなたが示された両方のモデルが( 'ContentTagAssignmnent')と同じです:) –
@StephenMuecke DOH!私に教えてくれてありがとう、ContentExternalLinkモデルを実際のモデルで更新しました。 – ajtatum
http://stackoverflow.com/q/20757594/861716 –