C# EF Core 3:当SaveChanges()时所有者属性插入失败
我的问题:插入具有自有属性的实体失败 我有一家C# EF Core 3:当SaveChanges()时所有者属性插入失败,c#,entity-framework-core,C#,Entity Framework Core,我的问题:插入具有自有属性的实体失败 我有一家餐厅实体,拥有地址自有财产。当我尝试创建一个新实体并将其插入数据库时,会在SaveChanges处引发一个异常: 无法将值NULL插入表“AppRefDB.dbo.Addresses”的列“RestaurantId”;列不允许空值。插入失败 我所做的 我的表地址如下所示: CREATE TABLE [dbo].[Addresses] ( [RestaurantId] INT NOT NULL, [Number] NVARCHAR(8
餐厅
实体,拥有地址
自有财产。当我尝试创建一个新实体并将其插入数据库时,会在SaveChanges
处引发一个异常:
无法将值NULL插入表“AppRefDB.dbo.Addresses”的列“RestaurantId”;列不允许空值。插入失败
我所做的
我的表地址
如下所示:
CREATE TABLE [dbo].[Addresses]
(
[RestaurantId] INT NOT NULL,
[Number] NVARCHAR(8) NULL,
[Street] NVARCHAR(150) NOT NULL,
[Zip] NVARCHAR(10) NOT NULL,
[Town] NVARCHAR(50) NOT NULL,
[Site] NVARCHAR(150) NULL ,
CONSTRAINT [PK_Addresses]
PRIMARY KEY ([RestaurantId]),
CONSTRAINT [FK_Address_Restaurants_RestaurantId]
FOREIGN KEY ([RestaurantId]) REFERENCES [Restaurants] ([Id])
ON DELETE CASCADE
)
await _dbContext.Set<Restaurant>()
.AddAsync(restaurant, cancellationToken);
_dbContext.SaveChangesAsync();
其中,RestaurantId
是主键,Restaurant
表中的FK
及
我在OnModelCreating
中这样定义了我的属性:
modelBuilder.Entity<Restaurant>()
.OwnsOne(p => p.Address)
.ToTable("Addresses");
编辑2:
我还测试了一个同步版本在本例中,您有一个具有地址集合的类对象
using (var context = new YourContext())
{
var model= new Restaurant{ Name = "McDonald's" };
model.addresses.Add(new addresses{ street="test",.... });
model.addresses.Add(new addresses{ street="test",.... });
context.Restaurant.Add(model);
context.SaveChanges();
}
这会解决你的问题
您可以在两个类中都添加
public ICollection<YourEntity> YourEntity{ get; set; }
如果在地址实体中添加此项,则需要先创建一个Resturan,然后分别添加地址事实上,这可能是EF 3.0中的一个错误
我使用EF 3.1(预览版)进行了测试,效果良好一家餐厅可以有多个地址?或者您可以添加更多关于您的模型的详细信息吗?您可以先创建一个餐厅,然后向其中添加地址模型。如果使用ef,则可以创建导航,然后向导航添加属性。不需要太多地址。这是一个玩具项目,我尝试测试一些新工具。但这可能是一种情况,我想理解。但无论如何,savinf地址是一个很好的解决方案。模型需要每个餐厅都有一个地址。使用owned property甚至是强化此功能的一种方式。很好,你能提供有关你的模型的详细信息吗?我刚刚在问题中添加了我的模型。这不起作用。这和我做的没什么不同哦你的模型不支持这种方式@FrédéricDeLèneMirouze@FrédéricDeLèneMirouze我根据您的模型添加解决方案
using (var context = new YourContext())
{
var model= new Restaurant{ Name = "McDonald's" };
model.addresses.Add(new addresses{ street="test",.... });
model.addresses.Add(new addresses{ street="test",.... });
context.Restaurant.Add(model);
context.SaveChanges();
}
public ICollection<YourEntity> YourEntity{ get; set; }
[ForeignKey("Restaurant")]
public long RestaurantId { get; set; }
public Restaurant Restaurant{ get; set; }