【问题标题】:How to seed data with AddOrUpdate with a complex key in EF 4.3如何在 EF 4.3 中使用带有复杂键的 AddOrUpdate 播种数据
【发布时间】:2012-05-01 08:54:19
【问题描述】:

我正在尝试使用一些测试数据为开发数据库播种。

我使用context.People.AddOrUpdate(p => p.Id, people)); 非常成功。

我有另一个表需要播种,但我不知道主键。

例如,我想根据名字和姓氏匹配来添加或更新。

我不确定如何正确编写表达式。

context.People.AddOrUpdate(p => p.FirstName && p.LastName, people);

显然是不正确的,但我希望它传达了我正在寻找的解决方案。

【问题讨论】:

    标签: c# entity-framework-4.3 seed linq-expressions entity-framework-migrations


    【解决方案1】:

    试试这个:

    context.People.AddOrUpdate(p => new { p.FirstName, p.LastName }, people);
    

    【讨论】:

    • @LadislavMrnka 如果标识符需要是复杂类型,即context.People.AddOrUpdate(p => new { p.Name.FirstName, p.Name.LastName }, people),该怎么办?
    • @LadislavMrnka,另外,如果属性是可空类型怎么办?即context.People.AddOrUpdate(p => new { p.Birthdate }, people) ?
    • 这里需要注意的是,'people' 集合需要是一个 ARRAY 而不是一个列表。如果你有一个实体列表,你可以简单地调用列表上的 .ToArray() 。我为那个苦苦挣扎:) - 很好的答案
    • 无法让它工作。可能是因为(除了复合键中指定的 3 个属性之外)我还有一个带有自动生成数字的 ID 字段?
    • @LadislavMrnka 在迁移和更新数据库字段后需要保留迁移文件夹(Configuration.cs 和...)???
    【解决方案2】:

    如果您因为使用导航属性而得到Only primitive types or enumeration types are supported in this context. - 请考虑将外键属性直接添加到实体(可能仅使用 getter)并按照 Ladislav Mrnka 的建议使用它。

    【讨论】:

    • 如何在code first方法中添加其他表外键的导航属性?我有像 context.People.AddOrUpdate(p => new { p.Name.FirstName, p.Name.LastName }, people) 这样的结构?这可能
    • 如果我设置getter属性错误是The specified type member 'NameId' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
    猜你喜欢
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 2019-02-17
    • 1970-01-01
    • 2013-03-26
    相关资源
    最近更新 更多