2017-06-01 88 views
0

我想通过DbContext添加一个Drink对象,但是在使用上下文添加饮品后,Brand属性变为null。 这可能是什么原因?EF核心添加对象无效导航属性

(忽略双_context add方法,被调试)

Before adding the drink 加入饮料 After adding the drink 加入饮料

模型后前:

public class Product 
{ 
    [Key] 
    public string Id { get; set; } 
    public string Name { get; set; } 
} 

public class Drink : Product 
{ 
    public Brand Brand { get; set; } 
    public Category Category { get; set; } 
    public ICollection<DrinkTag> DrinkTags { get; set; } 
} 


public class Brand 
{ 
    [Key] 
    public string Name { get; set; } 

    public ICollection<Drink> Drinks { get; set; } 
} 

public class Category 
{ 
    [Key] 
    public string Name { get; set; } 

    public ICollection<Drink> Drinks { get; set; } 
} 

public class Tag 
{ 
    [Key] 
    public string Name { get; set; } 

    public ICollection<Drink> Drinks { get; set; } 
} 

public class DrinkTag 
{ 
    public string DrinkId { get; set; } 
    public Drink Drink { get; set; } 
    public string TagId { get; set; } 
    public Tag Tag { get; set; } 
} 
+0

忘记导航属性,你能解释为什么drink.Name属性改变了吗? – Smit

+0

@Smit我没注意到。这两个截图是彼此正确的。我绝对没有通过观察名单改变任何事情,所以我不知道它是如何改变的。 – Stein121

+0

你能分享更多关于你的控制器的代码吗?特别是被调用的方法&DbContext如何被注入 – Smit

回答

0

你的饮料型号:

public class Drink : Product 
{ 
    public int BrandId { get; set; } 

    // Navigational properties 
    public Brand Brand { get; set; } 
    public Category Category { get; set; } 
    public ICollection<DrinkTag> DrinkTags { get; set; } 
} 

当您添加一个新的饮料只指定BrandId:

var myDrink = new Drink(); 
myDrink.BrandId = 2; 
// ... and so on 

此外,EF Core不自动加载相关的属性。所以,如果你想要品牌加载,你需要手动这样做:

var data = myContext.Drinks 
    .Include(p => p.Brand) 
    .FirstOrDefault(p => p.Id == yourId); 
+0

我没有加载,我正在创建。 – Stein121

+0

你的关系定义在这两个表之间的哪个位置? –

+0

品牌有许多饮料。饮料有一个品牌 – Stein121