我有DbContext
我可以通过开发人员命令提示符创建迁移架构,然后转到我的数据库。但是如果你看一下产品对象,我就有了一个名为Parts
的字典对象。在命令提示符中更新数据库时,该属性不会添加到Product
表中。我甚至不知道我是否有可能做的事情。
我想在名为Parts
的数据库中添加一个表,然后将一个外键添加到Product
表中,该表连接Parts
表中的Product
字典对象,以及新的Parts
表。这是否可以使用Entity Framework Core?
public class ShoppingDbContext : IdentityDbContext<User>
{
public ShoppingDbContext(DbContextOptions options) : base(options)
{
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
}
public DbSet<Product> Products { get; set; }
public DbSet<Order> Orders { get; set; }
}
public class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public double Price { get; set; }
public int CategoryId { get; set; }
Dictionary<string, Part> Parts { get; set; }
}
答案 0 :(得分:1)
EF Core目前无法直接映射字典属性。如果要在产品和零件之间创建关联,请将每个关联定义为实体。然后,您可以在它们之间创建导航属性 - 从零件到它所属的产品的引用,以及产品上的零件集合。例如:
$sXML = download_page('http://alanstorm.com/atom');
// Comment This
// $oXML = new SimpleXMLElement($sXML);
// foreach($oXML->entry as $oEntry){
// echo $oEntry->title . "\n";
// }
// Use json encode
$xml = simplexml_load_string($sXML);
$json = json_encode($xml);
$arr = json_decode($json,true);
print_r($arr);
Part还定义了一个属性ProductId,它充当Product实体的FK。您不需要添加该属性 - 如果您不想要,EF会为您模拟它,但如果将FK映射到属性,通常会更容易处理实体。
答案 1 :(得分:0)
通过对象引用而不是外键属性来跟踪关系。这种类型的关联称为independent association
。
更多详情在这里:
https://msdn.microsoft.com/en-us/data/jj713564.aspx
示例代码:
public partial class Product { public Product() { this.Parts = new HashSet<Part>(); } public int ProductId { get; set; } public string ProductName { get; set; } public double Price { get; set; } public int CategoryId { get; set; } public virtual ICollection<Part> Parts { get; set; } }
答案 2 :(得分:0)
基本上就像Arthur所说,EF Core还不支持它。
但是,另一种方法是根据需要创建复合表,或者它是否适合您使用。
这是一个简单的例子:
NamesTable
NID | Name |
1 | Mu |
2 | Ni |
3 | ices |
GroupTable
GID | GName |
1 | GroupA |
2 | GroupB |
3 | GroupC |
DeletedAt当然是可选的。这可以处理M-M关系。
答案 3 :(得分:0)
我有同样的问题,我通过删除导航属性上的关键字virtual并使用ApplicatinDbContext
解决了这个问题