我会实现这个使用Identifying Relationships和你的代码的一些重构。
public class CarModel
{
[Key, Column(Order = 0), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
[Key, ForeignKey("Brand"), Column(Order=1)]
public int BrandId { get; set; }
public Brand Brand { get; set; }
}
有实施库模式多种方式和我做了尽可能少的进行必要的修改,虽然我通常喜欢保存在一个层越往上的变化。
public class BrandRepository
{
private readonly Context context;
public BrandRepository(Context context)
{
this.context = context;
}
public void Add(Brand brand)
{
this.context.Brands.Add(brand);
}
public Brand FindByName(string name)
{
return this.context.Brands.Single(b => b.Name == name);
}
public void RemoveCarModel(Brand brand, string carModelName)
{
var carModelToRemove = brand.Models.Single(cm => cm.Name == "A car model");
brand.Models.Remove(carModelToRemove);
}
public void Save()
{
context.SaveChanges();
}
添加了一个测试,添加一个品牌与两个车型,然后删除其中一个车型。
[TestMethod]
public void Test()
{
// Arrange.
using (var context = new Context())
{
var models = new List<CarModel> {
new CarModel { Name = "A car model" },
new CarModel { Name = "Another car model" }
};
var brand = new Brand { Name = "A Brand", Models = models };
var brandRepository = new BrandRepository(context);
brandRepository.Add(brand);
brandRepository.Save();
}
// Act.
using (var context = new Context())
{
var brandRepository = new BrandRepository(context);
var brand = brandRepository.FindByName("A brand");
brandRepository.RemoveCarModel(brand, "A car model");
brandRepository.Save();
}
// Assert.
using (var context = new Context())
{
var brandRepository = new BrandRepository(context);
var brand = brandRepository.FindByName("A brand");
Assert.AreEqual(1, brand.Models.Count);
Assert.AreEqual("Another car model", brand.Models.Single().Name);
}
}
这是具体实施的问题。所以没有代码你的问题就没有意义了。 –
增加了一些更详细的问题。 –