我有
<Stepper Minimum="0" Maximum="10" Increment="0.1" ValueChanged="OnStepperValueChanged" />
<Label Text="{Binding Amount}" />
并且由于public class theInfo
{
public string Amount { get; set; }
}
myList.Add (new theInfo () {Amount = "0" }); //i add this in my listviewcode. it works, I get 0 in my listview on every created row.
async void OnStepperValueChanged(object sender, ValueChangedEventArgs e)
{
new theInfo () {Amount = string.Format ("Stepper value is {0:F1}", e.NewValue) }; //I reckon I have to convert Amount to a label.text somehow?
}
可以被其他类使用,因此最干净的解决方案似乎创建了一个名为Issue
{
//Id, etc
public List<CloudFile> Files { get; set; }
}
的中间表。问题是我在我的代码中没有使用这样的类...所以如何在不创建这样的中间类的情况下在CloudFile
和IssueFile
之间进行映射。或者这甚至可能吗?我知道有类似的问题(One to Many mapping with an intermediate table),但他们创建了这个中级但希望是不必要的课程。
答案 0 :(得分:1)
唯一没有退出中间表的是多对多映射。在您的情况下,您正在处理多项任选或多项需求。现在您有两个选择:
1)外键关联:为此,您需要在CloudFile
类中定义外键。这有一些优点,因为您可以通过更改外键值来更新关系,并且可以通过使用虚拟外键值添加新实体而无需依赖实体。总的来说,它更容易使用。
modelBuilder.Entity<Issue>()
.HasMany(i => i.CloudFile)
.WithRequired(i => i.Issue)
.HasForeignKey(i => i.Id);
2)独立关联:你的模型上没有外键(当然它确实在内部使用了键),并且这种关系跟踪了它自己的状态。
modelBuilder.Entity<Issue>()
.HasMany(i => i.CloudFile)
.WithRequired(i => i.Issue)
.Map(i => i.MapKey("Id"));
答案 1 :(得分:1)
你想要的是每个类型的表(TPT)继承。 CloudFile
将是您的基类,派生类型将表示与拥有实体的关系(Issue
,Order
等):
[Table( "CloudFile" )]
public class CloudFile
{
public int Id { get; set; }
}
[Table( "IssueCloudFile" )]
public class IssueCloudFile : CloudFile
{
}
public class Issue
{
public int Id { get; set; }
public List<IssueCloudFile> Files { get; set; }
}
或通过Fluent API:
modelBulider.Entity<CloudFile>().ToTable( "CloudFile" );
modelBuilder.Entity<IssueCloudFile>().ToTable( "IssueCloudFile" );
如果仅DbSet<CloudFile>
使用DbSet
来导出CloudFile
的派生类型,请使用.OfType<T>()
来获取这些类型:
var issueCloudFiles = db.CloudFiles.OfType<IssueCloudFile>();
// or through the referencing entities themselves
issueCloudFiles = db.Issues.SelectMany( i => i.Files );