私はあなたがそのようなアップロードなどのテーブルを持つことができ、 それがuploadable_idと呼ばれる2つの特性を有し、のAsp MVC Entity Frameworkのポリモーフィック抽象クラス
をuploadable_typeどこ提供するものlaravelに類似したC#での多型の関係を作成しようとしています今後アップロードが多い別のモデルを追加したい場合は、uploadable_type に追加するだけで、アップロードテーブルにsomething_idのようなフィールドを追加する必要はありません。
私は次のように抽象クラスを使用してC#で似た何かをしようとしました:
public abstract class AttachableEntity
{
public int Id { get; set; }
public ICollection<Upload> Files { get; set; }
}
public class Post : AttachableEntity
{
// other properties
}
public class Comment : AttachableEntity
{
public int PostId { get; set; }
public virtual Post Post { get; set; }
// other properties
}
public class Upload
{
public int Id { get; set; }
public string Filename { get; set; }
public int AttachableEntityId { get; set; }
public AttachableEntity AttachableEntity { get; set; }
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public DbSet<Post> Post { get; set; }
public DbSet<Comment> Comment { get; set; }
public DbSet<Upload> Upload { get; set; }
}
しかし、私は、移行を追加し、それが からプロパティを含めるAttachableEntityというテーブルを生成し、データベースを更新するときこの抽象クラスを継承するすべてのモデル?
AttachableEntityが抽象である場合、なぜAttachableEntityというテーブルが生成され、ポストまたはコメントテーブルが生成されないのですか?
チップのおかげで。しかし、もし私が例えば投稿IDを持っていれば、関連するすべてのアップロードを以下のように得ることができます:var post = context.Post.Include(x => x.Upload).Where(x => x.Id = id) .ToList(); 'しかし、アップロードクラスから関連モデルを特定するにはどうすればいいですか? AttachableEntityテーブルには、識別子フィールドはありませんか? – adam78
おそらく、Idを基本クラスに移動する必要があります。そして、 'DbSet'しか持っていないので、 'Attachables.OfType ().Where(...)'でフィルタリングすることができます。 –