如何使用efcore3设置拥有类型的实例?
在以下示例中,引发了异常
“类型为“拥有”的实体与以下用户共享表“ Principals” 'Principal'类型的实体,但没有具有 与已标记为“已添加”的键值相同。
如果我设置了子属性,则内联savechanges不会更新子属性
我找不到关于此的任何示例。我尝试了几种efcore3构建和每日构建。我不明白什么?
using System;
using System.Linq;
using Microsoft.EntityFrameworkCore;
namespace TestEF
{
class Program
{
static void Main(string[] args)
{
var id = Guid.NewGuid();
using (var db = new Ctx())
{
db.Database.EnsureDeleted();
db.Database.EnsureCreated();
var p = new Principal {Id = id};
db.Principals.Add(p);
db.SaveChanges();
}
using (var db = new Ctx())
{
var p = db.Principals.Single(o => o.Id == id);
p.Child = new Owned();
p.Child.Prop1 = "Test2";
p.Child.Prop2 = "Test2";
db.SaveChanges();
}
}
public class Principal
{
public Guid Id { get; set; }
public Owned Child { get; set; }
}
public class Owned
{
public string Prop1 { get; set; }
public string Prop2 { get; set; }
}
public class Ctx : DbContext
{
public DbSet<Principal> Principals { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("Data Source=.;Initial Catalog=TestEF;Trusted_Connection=True;Persist Security Info=true");
}
protected override void OnModelCreating(ModelBuilder mb)
{
var emb = mb.Entity<Principal>();
emb
.OwnsOne(o => o.Child, cfg =>
{
cfg.Property(o => o.Prop1).HasMaxLength(30);
//cfg.WithOwner();
});
}
}
}
}
答案 0 :(得分:1)
这是一个错误,已提交到https://github.com/aspnet/EntityFrameworkCore/issues/17422
作为解决方法,您可以使子级显示为已修改:
LENGTH(TRIM(BOTH FROM STAFF_NO)) AS STAFF_NO_LENGTH
答案 1 :(得分:0)
尝试以下方法:
_context.Update(entity);
这将更新所有拥有的属性,因此SaveChanges()也将更新它们。