entity framework并行一对多关系
我一直在寻找尝试在EF中创建一个并行的一对多关系。 这是我的意思:
我有两个类,交易和用户:
public class Transaction { public int ID { get; set; } public string ExecutorID { get; set; } public virtual User Executor { get; set; } public string ConsumerID { get; set; } public virtual User Consumer { get; set; } } public class User { public UserRole Role { get; set; } public string Name { get; set; } public string Id { get; set; } public string Pin { get; set; } public virtual List ExecutedTransactions { get; set; } public virtual List Transactions { get; set; } }
如果您还没有看到它,我在对象, Transactions
和Executed Transactions
之间有两个链接。 我的问题是如何告诉EF区分这两者?
事务应该指向User.ID == Transaction.ConsumerID
和ExecutedTransactions
所有Transaction
,其中User.ID == Transaction.ExecutorID
以下是Food
和Book
源自Item
。
public class Person { public int Id { get; set; } public string Name { get; set; } public ICollection Foods { get; set; } public ICollection Books { get; set; } } public abstract class Item { public int Id { get; set; } public string Name { get; set; } } public class Food : Item { public int CookedById { get; set; } [ForeignKey("CookedById")] public Person CookedBy { get; set; } } public class Book : Item { public int AuthorId { get; set; } [ForeignKey("AuthorId")] public Person Author { get; set; } }
选项每个层次结构的表
public class AppContext : DbContext { public DbSet People { get; set; } public DbSet- Items { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity
().HasMany(p => p.Foods).WithRequired(f => f.CookedBy).WillCascadeOnDelete(false); } }
结果将是2个表 ,表Person
和Item
具有自动Discriminator
列,将填充Food
和Book
。
要查询,您需要按类型过滤Items
。
using (var context = new AppContext()) { var foods = context.Items.Where(item => item is Food).ToArray(); var books = context.Items.Where(item => item is Book).ToArray(); }
选项B每个混凝土类别的表格
public class AppContext : DbContext { public DbSet People { get; set; } public DbSet Foods { get; set; } public DbSet Books { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity().HasMany(p => p.Foods).WithRequired(f => f.CookedBy).WillCascadeOnDelete(false); } }
结果将是3个表 ,表Person
, Food
和Book
。
要查询,您可以直接从食品和书籍。
using (var context = new AppContext()) { var foods = context.Foods.ToArray(); var books = context.Books.ToArray(); }
选项C每种类型的表
public class AppContext : DbContext { public DbSet People { get; set; } public DbSet- Items { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity
().HasMany(p => p.Foods).WithRequired(f => f.CookedBy).WillCascadeOnDelete(false); modelBuilder.Entity().ToTable("Foods"); modelBuilder.Entity().ToTable("Books"); } }
结果将是4个表 ,表Person
, Item
, Food
和Book
。 Table Food
and Book
将与表Ttem
。
查询与Table Per Hierarchy相同。
上述就是C#学习教程:entity framework并行一对多关系分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1001728.html