C# 属性不保存

C# 属性不保存,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我是EF的绝对初学者,我被这个问题困扰着: 我有两张表: 玩具和品牌 public class Toy { public int Id { get; set; } public string Name { get; set; } public int BrandId { get; set; } public Brand brand { get; set; } } public class Brand { public int BrandId { get;

我是EF的绝对初学者,我被这个问题困扰着:

我有两张表: 玩具和品牌

public class Toy
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int BrandId { get; set; }
    public Brand brand { get; set; }
}
public class Brand
{
    public int BrandId { get; set; }
    public string Name { get; set; }
}
我的DBContext文件:

public class SOT : DbContext
{ public SOT(): base("name=SOT")
    {

public virtual DbSet<Brand> brands; set; }
public virtual DbSet<Toy> toys { get; set; }
}
这似乎很好,如页面来源所示:

<select class="form-control" id="Toy_Brand" name="Toy.Brand"><option value="">Select 
Brand</option>
<option value="1">LEGO</option>
<option value="2">HASBRO</option>
<option value="5">Fisher Price</option>
</select>   
添加记录时,“品牌”字段为空

public ActionResult Create(Toy toy)
    {
        _context.Toy.Add(toy);
        _context.SaveChanges();
所有字段(品牌除外)均已保存OK 我做错了什么

谢谢,
James

你能在
@Html.DropDownListFor(m=>m.Toy.Brand)
中尝试使用BrandId而不是Brand吗?就像
Html.DropDownListFor(m=>m.Toy.BrandId)
这是你的解决方案,你需要告诉EF这是品牌的外键

编辑代码后再次迁移

using System.ComponentModel.DataAnnotations.Schema;


public class Toy
{
    public int Id { get; set; }
    public string Name { get; set; }

    [ForeignKey("brand")]
    public int BrandId { get; set; }
    public Brand brand { get; set; }
}
注意,您将在调试中看到brand为null,但若BrandId不为null,请不要担心 之后你现在是对的

db.SaveChanges()
从你那里得到玩具

Db.Toys.Include(x=>x.brand).ToList(); 

您不会知道品牌不为空

您是否在DbContext中编码了一对多关系?您所说的“品牌除外”是什么意思。品牌不应该被拯救。它已经在数据库中,你不想为每个玩具插入一个新品牌。重要的是
Toy.BrandId
是否正确保存。我很确定这不是重点。EF将推断外键bij默认约定。也许这个答案被接受的原因是,查询玩具
包括
-ing brand可以看到BrandId总是被保存,但他们不知道。不过,如果没有显式映射,应该没问题。
using System.ComponentModel.DataAnnotations.Schema;


public class Toy
{
    public int Id { get; set; }
    public string Name { get; set; }

    [ForeignKey("brand")]
    public int BrandId { get; set; }
    public Brand brand { get; set; }
}
db.SaveChanges()
Db.Toys.Include(x=>x.brand).ToList();